java - 安卓报警服务没有响应

标签 java android android-service android-alarms

我从 SO 以及其他一些网站上的一些问题中提取了一些代码,并提出了一个合理的解决方案。

我正在尝试做的事情:我需要在 2 分钟不活动后关闭该应用程序。所以我们的想法是在我们的应用程序进入“onPause”时启动警报服务,并在我们的应用程序进入“onResume”时取消服务。

我目前拥有的:这是当前正在运行的相关代码。我的问题是 TimeoutService java 文件永远不会被“onCreated”。简单地调用 AlarmManager.set 不会启动挂起的 Intent 吗?

Timeout.java 文件

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class Timeout 
{
    private static final int REQUEST_ID = 0;
    private static final long DEFAULT_TIMEOUT = 2 * 60 * 1000;  // 2 minutes

    public static final String INTENT_TIMEOUT = "timeoutintent";

    public static void start(Context ctx) 
    {
        //long triggerTime = System.currentTimeMillis() + DEFAULT_TIMEOUT;
        long triggerTime = System.currentTimeMillis() + (5000);
        AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(ctx, TimeoutService.class);
        PendingIntent pi = PendingIntent.getBroadcast(ctx, REQUEST_ID, intent, 0);
        am.set(AlarmManager.RTC, triggerTime, pi);
    }

    public static void cancel(Context ctx) 
    {
        AlarmManager am = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(ctx, TimeoutService.class);
        PendingIntent pi = PendingIntent.getBroadcast(ctx, REQUEST_ID, intent, 0);
        am.cancel(pi);
    }

}

锁定 Activity 文件。这用作我所有 Activity 的父类(super class)。

import android.app.Activity;
import android.widget.Toast;

public class LockingActivity extends Activity
{
    @Override
    protected void onPause() 
    {
        super.onPause();
        Timeout.start(this);
    }

    @Override
    protected void onResume() 
    {
        super.onResume();
        Timeout.cancel(this);
        checkShutdown();
    }

    private void checkShutdown() 
    {
        if ( AppVM.isShutDown() )
        {
            Toast.makeText(this, "Shuting Down", 1).show();
            finish();
        }
    }
}

我也可以发送 TimeoutService 文件,但它只是一个典型的服务文件。问题是 TimeoutService 类从未被实例化,所以我无法想象问题出在那个类上。

最佳答案

我认为你用警报使事情复杂化。使用 Handlerpostdelayed() 在两分钟内设置一个 Runnable,所有这些都在您的主要 Activity 中。任何用户交互都会取消帖子并在接下来的两分钟内设置一个新帖子。 runnable 只需要 yourActivity.finish();

在此处遵循此答案:Count for 45 seconds, pause for 20 then repeat with different title有关计时器的示例以及如何删除回调。

关于java - 安卓报警服务没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100774/

相关文章:

java - 将指定对象从一个 ArrayList 复制到另一个

android - facebook graph Api,如何设置隐私设置

android - 服务和 Android 应用程序生命周期

android - Firebase 测试实验室视频帧速率对于仪器测试来说太低

java - 如何在没有主线程或 Activity 的情况下从服务调用 Speechrecognizer 方法

Android 在两个进程之间共享 SurfaceTexture

java - 类在签名 Jar 文件之前找到,但不在签名之后找到

java - 画有网格的 JPanel,滚动时导致 CPU 使用率高

java - 合并 n 个列表中的 HashMap

android - 想要获取文档的完整路径