Android 当BroadcastReceiver被调用时,应用程序崩溃
我有两个小问题Android 当BroadcastReceiver被调用时,应用程序崩溃,android,android-fragments,android-intent,broadcastreceiver,android-broadcast,Android,Android Fragments,Android Intent,Broadcastreceiver,Android Broadcast,我有两个小问题 当应用程序运行时,我的应用程序的BroadcastReceiver工作正常,我收到“星期二2点”的toast消息,它会完美地更新应用程序,但当我关闭应用程序时,这意味着应用程序停止运行,它不会被调用,而是会崩溃“你的应用程序停止工作”,所以它知道应该调用它,但不会,对吗 似乎BroadcastReceiver每天下午2点左右都会被调用,不仅仅是在周二下午2点,我希望应用程序每周更新一次。是不是因为我在UpcomingFragment的onCreate上调用了setAlarm()方
<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是不是出了问题,还是我的应用程序出了问题。谢谢 您不能在
广播接收器的上下文中操纵片段。实际上,广播接收器是在应用程序上下文中运行的,您不能在其中访问UI内容
如果要在该广播触发后启动活动,则需要以下代码:
Intent intent = new Intent(context, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
注意:必须在活动上下文中访问UI(包括片段)
更新#1
似乎BroadcastReceiver每天下午2点左右都会被调用,不仅仅是在周二下午2点,我希望应用程序每周更新一次。是不是因为我在UpcomingFragment的onCreate上调用了setAlarm()方法
我想我的方法比你的好
- 获取当前时间并将其一周中的某一天设置为周二可能会导致错误
- 使用一种新的方法可能更好
对于前者,您的计划代码应将警报设置为最近的星期二下午2点。对于这一点,可能会有所帮助
对于后者,首先,向清单文件添加以下权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="your.package.name.BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
这可以确保你的应用程序在任何情况下都能在每周二下午2点更新 表示UpcomingFragment.getInstance().update()代码>线路问题我非常感谢你的朋友,你会介意或者对上面的第二个问题有一点想法吗?但是如果用户周二没有打开他的手机或者应用程序呢?@MadBoy哦,你是对的!你应该稍微修改一下这段代码来解决这个问题。@MadBoy
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name="your.package.name.BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
@Override
public void onReceive(Context context, Intent intent) {
// Set the alarm to coming Tuesday on 2 PM
}