有没有办法阻止用户轻松关闭启动AlarmManager的应用程序?

时间:2017-05-08 21:34:13

标签: java android alarmmanager alarm

我正在使用应用来跟踪设备的位置并将其与设置值进行比较。例如:父母希望确保在星期一早上8点到3点之间他的孩子在学校。该应用程序应该留在孩子的手机上,不时检查它的位置,然后将它与学校在一定范围内的坐标进行比较。如果孩子的手机碰巧超出界限,手机会通过电子邮件,短信或其他任何方式向家长发送简单的通知(尚未对该部分进行编程)。

我的问题是app只有在它打开时才能完成它的工作。这非常明显且可以理解,但我希望它更像闹钟。 “最近的应用程序”菜单中不存在闹钟,因此您无法轻易将其杀死,但仍会按时启动并按预期工作。此外,我不必在重新启动手机后重新打开闹钟,这可能也是我的应用程序的一个很好的补充。

我不希望它完全无法解决。只是有点困难,所以有孩子或有记忆问题的老人可以使用它而不会意外关闭。

这是我到目前为止所做的代码:

public class Alarm extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
    wl.acquire();

    //HERE WAS MY LOCATIONMANAGER MAGIC

    wl.release();
}

public void setAlarm(Context context)
{
    AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(context, Alarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 20, pi); // Millisec * Second * Minute


}

public void cancelAlarm(Context context)
{
    Intent intent = new Intent(context, Alarm.class);
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(sender);
}
}

0 个答案:

没有答案