有关Android中Alarm Manager的问题

时间:2012-05-07 23:41:20

标签: android android-widget alarmmanager

我正在使用Alarm ManagerService来更新小部件实例。在这样做时,我想错过了一些重要的地方。

这就是我设置Alarm Manager

的方法
public class MyWidget extends AppWidgetProvider {

    public void onEnabled(Context ctx) {
        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyService.class);
        pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

        // Repeat value depends on preferences.
        Long repeat = Long.parseLong(prefs.getString("update_preference", "600"));
        alarmManager.setRepeating(AlarmManager.RTC, SystemClock.elapsedRealtime(), 1000*repeat, pi); 
    }

    @Override
    public void onDisabled(Context context) {
        super.onDisabled(context);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(context, MyService.class);
        PendingIntent pi = PendingIntent.getService(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(pi);
    }

}

让我解释一下:

  1. 如果设备接到电话或拨打电话, Edge / 3G 效果不佳。我该如何处理电话?如果可以的话,是否可以在通话后重新启动/触发警报管理器?或任何其他建议表示赞赏。
  2. 当设备睡着(几分钟)时,即使间隔值超过,解锁警报管理器也会立即生效。但是如果睡眠需要很长时间,那么在解锁警报管理器和小部件接收器不工作之后。每次重复都超越睡眠的方式是什么。
  3. 如何控制重启进度?我的意思是重启后服务应该开始进行小部件更新。不确定开始的方式。
  4. 任何帮助或建议都会很棒。

1 个答案:

答案 0 :(得分:4)

你的一些问题不是很清楚,所以我会尽力回答:

  1. 您可以为TelephonyManager.ACTION_PHONE_STATE_CHANGED
  2. 注册广播接收器
  3. setRepeating来电更改为使用AlarmManager.RTC_WAKEUP而非AlarmManager.RTC。阅读更多here
  4. 您可以为Intent.ACTION_BOOT_COMPLETED注册广播接收器。这必须在您的应用清单上注册为接收者。阅读更多here