这些广播接收器都没有被触发,但在另一个我的应用程序正在我用来检查网络状态的地方工作。我对此问题没什么好说的。
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>
答案 0 :(得分:5)
如果您在Android 3.1或更高版本上看到此行为,您可能会看到此更改的结果:
http://developer.android.com/about/versions/android-3.1.html#launchcontrols
特别是读到这个:
请注意,系统会向所有人添加FLAG_EXCLUDE_STOPPED_PACKAGES 广播意图。这样做是为了防止来自后台的广播 来自无意或不必要的组件的服务 停止申请。
由于您的应用程序仅包含服务和接收器,因此用户永远不会启动此应用程序,因此将保持“已停止”状态,从而阻止其看到任何广播意图。
当您将活动添加到您的应用程序时,运行一次足以将应用程序从“已停止”状态删除,以便您的接收者有资格接收广播意图。实际上你不需要动态注册接收器。只需让用户在安装后“启动”应用程序一次即可。