广播接收器onReceive()从未调用过

use*_*953 5 android android-widget android-intent android-layout

我在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);
}
Run Code Online (Sandbox Code Playgroud)

应用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();
  }
Run Code Online (Sandbox Code Playgroud)

App 2的清单

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

5hs*_*sba 10

在ICS中,在您的应用程序至少手动启动一次之前,您将不会收到广播.在Android 3.1+中,如果应用程序从未运行过,或者已被强制停止,则应用程序处于停止状态.系统从广播意图中排除这些应用程序.可以使用这样的Intent.FLAG_INCLUDE_STOPPED_PACKAGES标志包含它们.

i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
Run Code Online (Sandbox Code Playgroud)

  • 但是在注册广播时如何在清单中包含此标志 (2认同)