我创建了一个wifi broadcastreceiver来检查wifi状态的变化。
此应用程序在Android 2.2.1设备上正常运行,但在4.x.x设备上没有接收广播,我已经在4.1.1和Android 4.4.2设备上测试过,没有运气?我必须在这里遗漏一些小东西。提前谢谢!
的AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wifi.test.testapp">
<application
android:allowBackup="true"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<receiver android:name=".WifiReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
<action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
<action android:name="android.net.wifi.STATE_CHANGE"/>
</intent-filter>
</receiver>
</application>
<!-- wifi -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
</manifest>
<小时/> .WifiReceiver类
public class WifiReceiver extends BroadcastReceiver {
private static final String TAG = "WifiReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "WifiReceiver");
NetworkUtil.getConnectivityStatusString(context);
}
}
<小时/> 的的build.gradle
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion '19.0.3'
defaultConfig {
minSdkVersion 8
targetSdkVersion 16
versionCode 1
versionName "1.0"
}
buildTypes {
release {
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:+'
compile 'com.android.support:support-v4:+'
}
答案 0 :(得分:0)
请使用此
<receiver
android:name=".WifiReceiver"
android:exported="false" >`enter code here`
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
答案 1 :(得分:0)
在API 3.1之前,我们可以拥有一个广播接收器,即使它所属的应用程序处于停止状态,也可以通过隐式意图调用它。 但这构成了安全威胁。因此, Google强制要求任何广播接收者接收意图,应该有活动且应用程序不应处于停止状态。
当应用程序启动时,它处于停止状态,因此它要求用户激活具有广播接收器的应用程序。如果应用程序被用户强制停止,则广播接收器再次无法接收到意图。因此,仅具有广播接收器且在3.1之前的版本上开发的apk将不再适用于更高版本。 但是,可以使用FLAG_INCLUDE_STOPPED_PACKAGES来激活已停止的应用程序中的组件。这不需要创建另一个活动以便使用广播接收器。
<小时/> 所以我只需要为广播接收器添加一个活动即可。