无法触发的Wifi接收器Android 4.x.x适用于2.2.1

时间:2014-04-04 07:12:19

标签: android broadcastreceiver android-4.2-jelly-bean

我创建了一个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:+'
}

2 个答案:

答案 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来激活已停止的应用程序中的组件。这不需要创建另一个活动以便使用广播接收器。

<小时/> 所以我只需要为广播接收器添加一个活动即可。