BroadcastReceiver无法正常工作

时间:2012-06-30 11:39:17

标签: android broadcastreceiver

这些广播接收器都没有被触发,但在另一个我的应用程序正在我用来检查网络状态的地方工作。我对此问题没什么好说的。

package monitor;

import android.content.BroadcastReceiver;

public class Monitor extends BroadcastReceiver {

      @Override
      public void onReceive(Context context, Intent intent) {
          System.out.println("jupi");
    }
}



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="monitor"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk
    android:minSdkVersion="9" 
    android:targetSdkVersion="15"/>

<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

<application 
    android:icon="@drawable/icon"
    android:label="@string/app_name">
    <service 
        android:name=".MonitorService">
    </service>
    <receiver 
        android:name=".Monitor">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <action android:name="android.intent.action.PHONE_STATE" />
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

</application>

1 个答案:

答案 0 :(得分:5)

如果您在Android 3.1或更高版本上看到此行为,您可能会看到此更改的结果:

http://developer.android.com/about/versions/android-3.1.html#launchcontrols

特别是读到这个:

  

请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES   广播意图。这样做是为了防止来自后台的广播   来自无意或不必要的组件的服务   停止申请。

由于您的应用程序仅包含服务和接收器,因此用户永远不会启动此应用程序,因此将保持“已停止”状态,从而阻止其看到任何广播意图。

当您将活动添加到您的应用程序时,运行一次足以将应用程序从“已停止”状态删除,以便您的接收者有资格接收广播意图。实际上你不需要动态注册接收器。只需让用户在安装后“启动”应用程序一次即可。