基本上,我的问题是我需要从我的服务(从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)
但“额外”似乎总是空的,有谁知道为什么?
答案 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”);
再次感谢所有人的帮助