我一直在尝试使用LocalBroadcastManager,但它似乎不起作用。基本上我希望我的intentService在它运行时广播一个intent。 然后,当用户正在积极使用活动时,我希望我的活动接收广播。
我试着按照这里的说明操作: how to use LocalBroadcastManager?
但由于某种原因它不起作用。我没有为被调用的接收器获取任何日志条目。
以下是我的代码的相关部分:
public class MainActivity extends Activity {
// Debug log tag
private static final String tag = "PhoneControlMainActivity";
// Broadcast receiver
PhoneControlBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Register the receiver with the local broadcast manager
receiver = new PhoneControlBroadcastReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(PhoneControlBroadcastReceiver.SERVICE_OUTPUT));
// Start IntentService
try {
serviceName = startService(new Intent(this, PhoneControlIntentService.class));
}
catch(SecurityException e)
{
Log.d(tag,"SecurityException occured when starting IntentService: "+ e.getMessage());
return;
}
if(serviceName != null) {
Log.d(tag,"serviceName NOT NULL");
}
else {
Log.d(tag,"serviceName NULL");
}
}
}
public class PhoneControlIntentService extends IntentService {
public PhoneControlIntentService() {
super("PhoneControlIntentService");
}
@Override
protected void onHandleIntent(Intent intent) {
Intent msgIntent = new Intent(PhoneControlBroadcastReceiver.SERVICE_OUTPUT);
msgIntent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(msgIntent);
}
}
public class PhoneControlBroadcastReceiver extends BroadcastReceiver{
// Action
public static final String SERVICE_OUTPUT = "com.axr0284.phonecontrol.SERVICE_OUTPUT";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(tag,"onReceive called");
}
}
任何帮助都会受到高度赞赏? 谢谢 阿米什
答案 0 :(得分:3)
LocalBroadcastManager不能在它自己的进程外广播。
答案 1 :(得分:0)
以下是我做错了,service
中的AndroidManifest.xml
声明有此行
android:process=":PhoneControlIntentService_process"
<service
android:name=".PhoneControlIntentService"
android:label="@string/IntentService_name"
android:process=":PhoneControlIntentService_process"**
android:exported="false"/>
这应该作为一个单独的进程启动service
。我猜不知怎么会阻止localBroadcastManager
正确发送intent
。我不太了解它,但当我删除该行时,它开始工作。