我创建了一个由一个静态接收器组成的应用程序:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.docd.connectivityresetter"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver android:name=".ConnectivityReceiver"
android:enabled="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
</application>
</manifest>
接收者
package com.docd.connectivityresetter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public final class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
android.util.Log.i("received", intent.getAction());
android.util.Log.i("received", intent.getExtras().toString());
}
}
安装了应用程序。
1)当我触发飞行模式(小区网络关闭)时没有收到(没有日志)
2)我的应用程序未列在手机应用程序设置菜单的“正在运行”选项卡中(当注册静态接收器时,不应将其列为“正在运行”)?
我在搜索时遇到过这种情况。一切都匹配,除了它对我不起作用。 Intent action for network events in android sdk
答案 0 :(得分:1)
我有同样的问题,我通过添加:
解决了这个问题<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<receiver android:name=".ConnectivityReceiver" >
<intent-filter>
<action android:name="android.intent.action.SERVICE_STATE" />
</intent-filter>
</receiver>
如果它不起作用,另一种方法是在你的应用程序中添加一个PhoneStateListener:
首先,在清单中添加服务类:
<service android:name=".YourService" />
然后,使用phonestatelistener
的开头创建您的服务@Override
public void onCreate(){
TelephonyManager tm = (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE);
listener = new PhoneStateListener() {
@Override
public void onServiceStateChanged(ServiceState serviceState){
// Your code regarding ServiceState
}
};
tm.listen(listener,PhoneStateListener.LISTEN_SERVICE_STATE);
super.onCreate();
}
然后,在第一个活动中启动服务
startService(new Intent(YourActivity.this, YourService.class));
最终的解决方案,也许不是最好的解决方案,但如果你仍然想要依赖接收器就是在启动事件ACTION_BOOT_COMPLETED
上启动PhoneStateListener(不要忘记RECEIVE_BOOT_COMPLETED
权限情况下)
答案 1 :(得分:0)