web-dev-qa-db-ja.com

マニフェストで宣言されたBroadcastReceiverがブロードキャストを受信して​​いません

Wifi BroadcastReceiverを登録して、WiFiの状態が変化したときにWifiの状態を取得しようとしました。しかし、今のところ私は放送を受信することができません。

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name" >
    <receiver Android:name=".WifiReceiver" >
        <intent-filter>
            <action Android:name="Android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" />
            <action Android:name="Android.intent.action.PHONE_STATE" />
        </intent-filter>
    </receiver>

    //activity declaration here...

</application>

BraodcastReceiverをマニフェストに登録する方法を知っていますか?

アクティビティに登録したくないしたいのでwifiを監視アプリケーションが実行中かどうかに関係なく、wifi状態に変化がある場合。

これは私のBroadcastReceiverクラスです:

public class WifiReceiver extends BroadcastReceiver {
    private final String TAG = "WifiReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);
        String wifiStateText = "No State";

        switch (wifiState) {
        case WifiManager.WIFI_STATE_DISABLING:
            wifiStateText = "WIFI_STATE_DISABLING";
            break;
        case WifiManager.WIFI_STATE_DISABLED:
            wifiStateText = "WIFI_STATE_DISABLED";
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            wifiStateText = "WIFI_STATE_ENABLING";
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            wifiStateText = "WIFI_STATE_ENABLED";
            break;
        case WifiManager.WIFI_STATE_UNKNOWN:
            wifiStateText = "WIFI_STATE_UNKNOWN";
            break;
        default:
            break;
        }
        MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText);
        MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date());
    }
}

私は本当に助けてもらいたいです。前もって感謝します。

13
Zul

マニフェストのレシーバーは次のようになります

<receiver Android:name=".WifiReceiver" >
    <intent-filter>
       <action Android:name="Android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>

また、以下の許可が必要になる場合があります

<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
27
dong221

ターゲットAndroidバージョンがAndroid O.よりも大きい場合。

注:アプリがAPIレベル26以上を対象としている場合、マニフェストを使用して、暗黙のブロードキャスト(アプリを具体的に対象としないブロードキャスト)のレシーバーを宣言することはできません。ただし、その制限から除外されているいくつかの暗黙のブロードキャストを除きます。ほとんどの場合、代わりにスケジュールされたジョブを使用できます。

リソース: https://developer.Android.com/guide/components/broadcasts

4
<receiver Android:name=".WifiReceiver" >
     <intent-filter Android:priority="100" >
          <action
             Android:name="Android.net.wifi.WIFI_STATE_CHANGED"
             Android:enabled="true" />
     </intent-filter>
</receiver>

高優先度と有効化フラグをtrueとして入力します

3
user1203673

ブロードキャストがフラグIntent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOTで送信されたというだけの理由で、アプリはこのレシーバーをAndroid起動する前に登録する必要があります。これは、システムサービスのみとなります。

0
Cytown

私のために働いた最高のもの:

マニフェスト:

<receiver Android:name="com.AEDesign.communication.WifiReceiver">
    <intent-filter Android:priority="100">
        <action Android:name="Android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

WifiReceiver Class:

public class WifiReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
        if(info != null) {
            if(info.isConnected()) {
                //Do your work. 
                //To check the Network Name or other info:
                WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                WifiInfo wifiInfo = wifiManager.getConnectionInfo();
                String ssid = wifiInfo.getSSID();    
            }
        }
    }
}

権限:

<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE"/>
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE"/>
0
M. Usman Khan

私はあなたがこのように受信機を登録したと思います:

<receiver
    Android:name=".WiFiReciever">
    <intent-filter>
        <action
            Android:name="class name with package" />
        <data
            Android:scheme="myscheme" />
    </intent-filter>
</receiver> 
0
Newts