【发布时间】:2015-11-14 06:42:54
【问题描述】:
我有两个小问题;
我的应用程序的 BroadcastReceiver 在应用程序运行时工作正常,我完美地收到“星期二 2 点”吐司消息,它会更新应用程序,但是当我关闭我的应用程序时,这意味着应用程序停止运行,它不会'没有被调用,而是它崩溃了“你的应用程序停止工作”,所以它知道它应该调用它,但不是,对吧?
似乎每天下午 2 点左右都会调用 BroadcastReceiver,不仅是在星期二下午 2 点,我希望应用程序每周更新一次。是不是因为我在 UpcomingFragment 的 onCreate 上调用了 setAlarm() 方法?
在 UpcomingFragment 类中(我将闹钟设置为每周二 2 点响起)
private void setAlarm(){
AlarmManager alarmMgr = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getActivity(), UpdateReceiver.class);
intent.putExtra("greeting", "Hello");
PendingIntent alarmIntent = PendingIntent.getBroadcast(getActivity(), 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
calendar.set(Calendar.HOUR_OF_DAY, 14);
// With setInexactRepeating(), you have to use one of the AlarmManager interval
// constants--in this case, AlarmManager.INTERVAL_DAY.
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
}
在BroadcastReceiver的onReceive()中
public class UpdateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
UpcomingFragment.getInstance().update();
//if tuesday
Toast.makeText(context, "Tuesday at 2" , Toast.LENGTH_LONG).show();
}
}
清单:
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".UpdateReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
我无法为您提供 logcat,因为它在兑现时不打印它,我不知道我的 android studio 是在这里还是我的应用程序有问题。谢谢!
【问题讨论】:
-
表示
UpcomingFragment.getInstance().update();导致问题的行
标签: android android-fragments android-intent broadcastreceiver android-broadcast