BroadcastReceiver需要帮助

时间:2011-08-25 18:07:33

标签: android broadcastreceiver android-intent android-service

基本上,我的问题是我需要从我的服务(从Intent开始)向我的主要活动发送数据。 (这是我第一次尝试使用BroadcastReceiver)

我有两个应用程序,com.example.myapp(包含主要活动)和com.example.myapp.licence(包含后台服务)

我目前的情况如下:

com.example.myapp> MainActivity:

// Start background service
Intent intent = new Intent();
intent.setClassName("com.example.myapp.licence", "com.example.myapp.licence.LicenceCheck");
startService(intent);

// Setup BroadcastReceiver 
private BroadcastReceiver MyBroadcastReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();
        String status = extras.getString("status");
    }
};

//  Start reciever
IntentFilter filter = new IntentFilter("STATUS_RETURN");
registerReceiver(MyBroadcastReceiver, filter);

com.example.myapp.licence> LicenceCheck:

Intent intentToActivity = new Intent("STATUS_RETURN");
intent.putExtra("status", "verified");
sendBroadcast(intentToActivity);

任何人都可以建议我需要更改以使此BroadcastReceiver工作吗?

修改: 编辑纠正错字。问题仍然存在

编辑2 : 现在看来正在使用BroadcastReciever,但是下一行有问题(因为它强制关闭它):

String status = extras.getString("status");

编辑3 : 通过围绕该行修正上述问题,并使用以下IF语句:

if (extras != null)

但“额外”似乎总是空的,有谁知道为什么?

4 个答案:

答案 0 :(得分:2)

我猜不匹配的“STATUS_REUTRN”和“STATUS_RETURN”与它有关吗?

<强>更新

您似乎遇到Intent resolution问题(向下滚动屏幕)。意图可以是以下之一:

  • 明确意图 - 必须通过setClass()定义目标类。

  • 隐含意图 - 必须包含足够的信息才能解决:类型,操作,类别。

如果可能,请将其添加到广播意图中:

intentToActivity.setClassx(this, com.example.myapp.MainActivity.class);

答案 1 :(得分:0)

将广播接收器的可见性更改为public

启动您的服务,如

startService(new Intent(getApplicationContext(), com.example.myapp.licence.LicenceCheck.class));

答案 2 :(得分:0)

我使用AIDL来实现这一目标。 它允许在您的服务和活动之间传输数据。 http://developer.android.com/guide/developing/tools/aidl.html

要学到很多东西,但这是我所知道的最好的方法。

答案 3 :(得分:0)

经过多年的测试,我终于找到了问题。

我将服务中的字符串添加到错误的Intent中; 将它意外地添加到先前定义的那个,而不是发送广播的那个。

原件:     intent.putExtra(“status”,“Verified”);

正确:     intentToActivity.putExtra(“status”,“Verified”);

再次感谢所有人的帮助