【问题标题】:Broadcast receiver onReceive() never called广播接收器 onReceive() 从未调用
【发布时间】:2012-03-20 08:48:14
【问题描述】:

我在 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);
}

应用 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();
  }

应用程序 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>

【问题讨论】:

    标签: android android-layout android-intent android-widget


    【解决方案1】:

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

    i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    

    【讨论】:

    • 感谢这解决了问题。但我们首先运行接收活动,然后运行发送活动。那为什么我们会遇到这个问题?
    • 应用程序在首次安装但尚未启动时处于停止状态,并且当它们被用户手动停止时(在管理应用程序中)......请参阅developer.android.com/sdk/android-3.1.html#launchcontrols
    • 但是在注册广播时如何在清单中包含这个标志
    • @ShahjahanKhan 为什么需要为发送者广播注册一个标志?您只需要在代码中执行此操作,因为发送者不需要在清单中注册任何内容,只需在接收者中注册。如果我理解正确的话,这个标志只与 Android 的操作系统端相关,用于选择将触发此广播的应用程序实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    相关资源
    最近更新 更多