【问题标题】:android alarm manager does not work after phone is restarted手机重启后android报警管理器不工作
【发布时间】:2015-05-24 13:58:25
【问题描述】:

我正在使用以下代码在特定时间使用通知提醒用户有关应用程序中的新更新,一切正常,我们会在所需时间收到警报

这里是 mainactivity.java

public void setAlarm(){
    alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
    pendingIntent = PendingIntent.getBroadcast(  MainActivity.this, 0, alarmIntent, 0);

    alarmStartTime.set(Calendar.HOUR_OF_DAY, 10);
    alarmStartTime.set(Calendar.MINUTE, 00);
    alarmStartTime.set(Calendar.SECOND, 0);
    alarmManager.setRepeating(AlarmManager.RTC, alarmStartTime.getTimeInMillis(), getInterval(), pendingIntent);
}
private int getInterval(){
     int days = 1;
     int hours = 24;
     int minutes = 60;
     int seconds = 60;
     int milliseconds = 1000;
     int repeatMS = days * hours * minutes * seconds * milliseconds;
     return repeatMS;
}

AlarmReceiver.java

public class AlarmReceiver extends BroadcastReceiver {

    NotificationManager notificationManager;

    @Override
    public void onReceive(Context context, Intent intent) {
        Intent service1 = new Intent(context, AlarmService.class);
            context.startService(service1);
    }
}

和AlarmService.java

public class AlarmService extends Service { 
   private static final int NOTIFICATION_ID = 1;
   private NotificationManager notificationManager;
   private PendingIntent pendingIntent;

    @Override
    public IBinder onBind(Intent arg0)
    {
        return null;
    }

   @SuppressWarnings("static-access")
   @Override
   public void onStart(Intent intent, int startId)
   {
       super.onStart(intent, startId);
       Context context = this.getApplicationContext();
       notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);
       Intent mIntent = new Intent(this, MainActivity.class);
    pendingIntent = PendingIntent.getActivity(context, 0, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);     
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
    builder.setContentTitle("Bananas");
    builder.setContentText("get your bananas");
    builder.setSmallIcon(R.drawable.ic_launcher);
    builder.setContentIntent(pendingIntent);

    notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    }
}

我的问题是,如果我们重新启动手机之前所有有关警报的信息都丢失了,并且下次重新启动后我们没有收到警报,可以解决的问题是警报管理器或通知有问题.

【问题讨论】:

标签: android notifications alarmmanager


【解决方案1】:

您需要将此添加到您的AndroidManifest.xml

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

 <receiver
            android:name="Your package name.AlarmReboot"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            </intent-filter>
        </receiver>

并添加一个广播接收器,它会在手机重启后再次设置警报:

public class AlarmReboot extends BroadcastReceiver{

}

【讨论】:

  • 当手机重新启动时警报确实响了,但是根据代码它应该每 24 小时响一次,那部分没有工作如何让它工作
  • 我所做的是将日期保存为共享首选项中的字符串,然后在 BroadcastReciever 中检索它,再次将其转换为日期并再次设置警报。我不确定这是最优雅的方式,但它对我有用......
【解决方案2】:

这解释得更好

http://javatechig.com/android/repeat-alarm-example-in-android

如何在设备重启时设置闹钟

【讨论】:

    【解决方案3】:

    您可以使用setExact() API,而不是使用setRepeating,因为setRepeating() API 在sleep modeswitched off 中延迟AlarmManager 意图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      相关资源
      最近更新 更多