服务通过BroadcastReceiver"随机启动"

时间:2015-01-25 10:46:35

标签: android broadcastreceiver android-service android-notifications

我希望每天在指定的时间收到通知。

为此,我实现了一个广播接收器和一个AlarmManager。

我怀疑接收器是对系统的每次广播做出反应。

如果我设置了alarmManager,它工作正常一段时间,但几乎每小时(大约)都收到通知。

另一个奇怪的行为,如果我进入飞行模式,通知就不会显示出来。

public class MyReceiver extends BroadcastReceiver
{

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

主要活动

    long REPEATE_TIME_MS=86400000 /*24h*/;      
/* notification handling */
    String syncConnPref = this.sharedPref.getString("notificationTime", "12:00"); 
    String[] pieces=syncConnPref.split(":");
    /* setup the start time for the alarm */
    Calendar calendar = Calendar.getInstance();
    long nowInMillisecs = calendar.getTimeInMillis();
    calendar.set(Calendar.HOUR_OF_DAY, Integer.parseInt(pieces[0], 10));
    calendar.set(Calendar.MINUTE, Integer.parseInt(pieces[1], 10));
    long alarmStartTimeUnMillisecs = calendar.getTimeInMillis();
    if(alarmStartTimeUnMillisecs<=nowInMillisecs)
    {
        calendar.add(Calendar.DAY_OF_YEAR, 1);
        alarmStartTimeUnMillisecs = calendar.getTimeInMillis();
    }

    Intent myIntent = new Intent(this.notificationContext, MyReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.notificationContext, 0, myIntent,PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager)this.notificationContext.getSystemService(Service.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), REPEATE_TIME_MS, pendingIntent);
    Log.d(TAG, "Alarm setup with :"+ calendar.get(Calendar.HOUR_OF_DAY)+":"+ calendar.get(Calendar.MINUTE));

的manifest.xml

    <receiver android:name="com.example.whoseturn.MyReceiver" android:enabled="true"> 
         <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

0 个答案:

没有答案