我在ICS中遇到此问题,但在以前的版本中没有:
从App1,我发送广播并试图在App 2活动中接收它。但是在App 2的活动中从未调用onReceive。
我无法理解该块的onReceive被调用是什么,尽管我已经正确指定了所有内容。
我首先运行BroadcastReceive,然后运行BroadcastSend
非常感谢能帮助我解决这个问题的任何帮助。
App1发送活动
public class BroadcastSend extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent i = new Intent();
i.setAction("edu.ius.rwisman.custom.intent.action.TEST");
i.putExtra("url","ww.ius.edu");
sendBroadcast(i);
}
App 2接收活动
public class BroadcastReceive extends BroadcastReceiver{
// Display an alert that we've received a message.
@Override
public void onReceive(Context context, Intent intent){
System.out.println("Inside onReceive");
String url = intent.getExtras().getString("url");
Toast.makeText(context, "BroadcastReceive:"+url, Toast.LENGTH_SHORT).show();
}
App 2的清单
<?xml version="1.0" encoding="utf-8"?>
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name="edu.ius.rwisman.BroadcastReceive.BroadcastReceive" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="edu.ius.rwisman.custom.intent.action.TEST"/>
</intent-filter>
</receiver>
</application>
答案 0 :(得分:10)
在ICS中,在手动启动应用程序至少一次之前,您不会收到广播。在Android 3.1+中,如果应用程序从未运行过,或者已经强行停止,则应用程序处于停止状态。系统从广播意图中排除这些应用程序。可以使用这样的Intent.FLAG_INCLUDE_STOPPED_PACKAGES标志包含它们。
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);