2011-04-24 65 views
0

我正在写报警代码并使用广播接收器。我能够接收广播接收器。但现在我想回到调用活动并更新我的活动的UI。我无法做到这一点。 我在我的活动中使用了以下代码,但它永远不会执行该代码。当广播接收器触发报警时,更新呼叫活动的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); 
    } 
在我已经包括以下清单文件

,这里gotAlarm是广播接收文件

<receiver android:name=".gotAlarm" 
     android:enabled="true"> 
     </receiver> 

gotAlarm文件是其中一个会从报警的未决意图称为设置

public class gotAlarm extends BroadcastReceiver { 
public void onReceive(Context context, Intent intent){ 
    Toast.makeText(context, "Wake Up!!", Toast.LENGTH_LONG).show(); 

    } 
} 

可能是我缺少一些非常基本的东西。 请帮忙。

+0

这是一个闹钟代码,我试图更新活动的UI,如果它在前台。如果不是,那么只要它打开并且满足某些条件,就应该更新它自己。现在我正在专注于第一部分,即每当有闹钟时间时它应该更新UI。我知道这是可行的,因为很多人可能成功地做到了。但我在这里修复: - | – 2011-04-24 19:37:05

+0

当我第一次启动我的应用程序时,我看到onResume()方法正在调用。之后,当警报不是onPause()或onResume被调用时。 – 2011-04-25 04:05:05

+0

我现在改变了我的方法。因为我没有发现它正在运行: - |现在,我正在将数据从活动发送到广播,然后从此广播中启动新活动并将数据传递到此新活动。我会很快发布代码。 – 2011-04-26 07:18:03

回答

1

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

0

您是否register your BroadcastReceiver(您可以在您的活动的'onResume'方法中执行此操作)?另外,您应该在'onPause'方法中使用unregister your BroadcastReceiver

+0

不,我没有。让我试试看,我会尽快回复你。 – 2011-04-24 19:05:04

+0

@Lucas:我已经完成注册并取消注册,但没有运气:( – 2011-04-24 19:21:53

+0

嘿,我必须在onPause()和onResume()代码中添加更多代码吗? – 2011-04-24 19:25:30

1

两件事情:

  1. 如果动态地注册通过Context.registerReceiver接收器(),那么当活动被暂停(或停止或不运行)您将不会收到广播。如果您需要在活动暂停时接收广播,则创建一个顶级BroadcastReceiver类(与您的内部类相对)并使用<receiver>进行注册。

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

+0

“然后创建一个顶级的BroadcastReceiver类(而不是你的内部类)”我知道了,但是你能为此提供任何示例代码吗? – 2011-04-24 19:17:07

+0

我已经在清单中使用标记。我想你很了解我的问题。因为即使活动暂停,我也需要得到我在示例中写的Toast。 – 2011-04-24 19:21:14

+0

你能发表你的''标签的发布内容吗? – 2011-04-24 19:35:30

相关问题