Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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 当广播接收器触发警报时,更新调用活动的UI或启动新活动_Android_Android Activity_Broadcastreceiver - Fatal编程技术网

Android 当广播接收器触发警报时,更新调用活动的UI或启动新活动

Android 当广播接收器触发警报时,更新调用活动的UI或启动新活动,android,android-activity,broadcastreceiver,Android,Android Activity,Broadcastreceiver,我正在编写报警代码并使用广播接收器。我能够接收广播接收器。但是现在我想回到调用活动并更新活动的UI。我不能这样做。 我在活动中使用了以下代码,但它从未执行该代码 private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Toast.makeTe

我正在编写报警代码并使用广播接收器。我能够接收广播接收器。但是现在我想回到调用活动并更新活动的UI。我不能这样做。 我在活动中使用了以下代码,但它从未执行该代码

 private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "I am back!!", Toast.LENGTH_LONG).show();
    }
  };


  @Override
    protected void onPause()
    {
        super.onPause();
        unregisterReceiver(myBroadcastReceiver);
    }

    @Override
    protected void onResume()
    {
        super.onResume();
        IntentFilter intentFilter = new IntentFilter("com.test.Main");
        registerReceiver(myBroadcastReceiver, intentFilter);
    }
在清单文件中,我包含了以下内容,这里是广播接收器文件

   <receiver android:name=".gotAlarm"
        android:enabled="true">
        </receiver>
可能是我遗漏了一些非常基本的东西。 请帮助。

您是否(您可以在“onResume”方法中执行此操作)?此外,您还应该使用“onPause”方法。

两件事:


  • 如果通过Context.registerReceiver()动态注册接收器,则当活动暂停(或停止或未运行)时,将不会接收广播。如果您需要在活动暂停时接收广播,则创建顶级BroadcastReceiver类(与内部类相反),并使用
    注册它

  • BroadcastReceiver生命周期BroadcastReceiver对象仅在处理
    onReceive()
    期间处于活动状态。您不能执行任何异步任务,如显示对话框等。。在您的情况下(活动可能未运行并且您收到广播),您应该使用NotificationManager通知用户发生了什么


  • 我已经放弃了这种方式,我开始了一个新的活动,接收广播。我将信息数据从呼叫活动发送到广播,从广播发送到下一个活动。这已经达到了目的。

    “然后创建一个顶级BroadcastReceiver类(与您的内部类相反)”我知道了,但是您能提供一些示例代码吗?我已经在清单中使用了标记。我想你很了解我的问题。当活动暂停时,我需要得到我在示例中写的祝酒词。你能发布你的
    标签的内容吗?你有一个名为
    gotAlarm
    的类,它是BroadcastReceiver的一个子类?是的,gotAlarm类从BroadcastReceiver扩展而来。我再次编辑了我的代码。@Lucas:我已经完成了注册和注销,但运气不好:(嘿,我必须在onPause()和onResume()中添加更多的代码吗?)代码?需要调用来自超类的“onPause”例如“onResume”方法。这是一个报警代码,如果活动在前台,我将尝试更新它的UI。如果它不在前台,那么它应该在每次打开并且满足某些条件时更新自身。现在我集中在第一部分,即,它应该每当出现警报时更新UI。我知道这是可行的,因为许多人可能已经成功地完成了。但我在这里遇到了一个问题:-当我第一次启动应用程序时,我看到onResume()方法正在被调用。之后,当警报出现时,onPause()和onResume()都不会被调用nor onResume没有被调用。我现在改变了我的方法。因为我没有发现它正在运行:-现在我正在从一个活动发送数据到另一个广播,然后从这个广播我正在启动一个新活动,并将数据传递到这个新活动。我将很快发布代码。
    public class gotAlarm extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent){
        Toast.makeText(context, "Wake Up!!", Toast.LENGTH_LONG).show();
    
       }
     }