Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当BroadcastReceiver被调用时,应用程序崩溃_Android_Android Fragments_Android Intent_Broadcastreceiver_Android Broadcast - Fatal编程技术网

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()方

我有两个小问题

  • 当应用程序运行时,我的应用程序的BroadcastReceiver工作正常,我收到“星期二2点”的toast消息,它会完美地更新应用程序,但当我关闭应用程序时,这意味着应用程序停止运行,它不会被调用,而是会崩溃“你的应用程序停止工作”,所以它知道应该调用它,但不会,对吗

  • 似乎BroadcastReceiver每天下午2点左右都会被调用,不仅仅是在周二下午2点,我希望应用程序每周更新一次。是不是因为我在UpcomingFragment的onCreate上调用了setAlarm()方法

  • 在UpcomingFragment类中(我将警报设置为每个星期二2点响)

    在BroadcastReceive()的onReceive()中

    舱单:

    <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
    }