ネットワーク関連のイベントを受信できません
-
28-10-2019 - |
質問
登録しました ConnectivityManager.CONNECTIVITY_ACTION
ネットワーク状態イベントを受けるためのBroadCastReceiver、しかし私の onReceive
WiFi接続をオンまたはオフにすると、機能が呼び出されません。
ドキュメントで述べたように、これは登録時に解雇される粘着性の放送レシーバーです。
しかし、私は自分のイベントを取得していません onReceive
このレシーバーに登録すると機能しますが、原因は何ですか?
マニフェストファイルには、インターネット/ネットワーク/WiFi接続とその状態にアクセスするためのすべての許可があります。
次のコードを使用して、この意図で登録しています。
registerReceiver(mNetworkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
私のログキャットでは、このブロードキャストレシーバーの次のエラーメッセージ登録を取得します。
01-01 00:05:29.804: ERROR/WifiHW(1305): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": Connection refused
原因は何でしょうか? BroadCastReceiverが適切に登録されているかどうかを知る方法はありますか?
ありがとう。
解決
これは私にとってはうまくいきます:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<receiver android:name=".receiver.ConnectivityReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
コード:
public class ConnectivityReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(ConnectivityReceiver.class.getSimpleName(), "action: "
+ intent.getAction());
}
}
すべてのネットワーク許可を登録することを忘れないでください。
他のヒント
マニフェストファイルを使用して試してみてください
<receiver android:name=".MyNetworkStateReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
クラス MyNetworkStateReceiver
拡張する必要があります BroadcastReceiver
下位レベルの問題のように見えます - グーグルでエラーをグーグルで、複数のROMハッキングフォーラムとそのWiFiの誤動作が明らかになります。何でテストしていますか?別のデバイスまたはエミュレータでテストを試してみてください。 (私はあなたがあなたのものを再起動しようとしたと思います:))
また、アクティビティ/サービスが破壊されたら、受信機の登録解除を確認してください(これは接続エラーと関係があるかもしれません)
PS私はあなたが言ったことを知っていますが、それでもあなたが持っていることを再確認してください
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
あなたのマニフェストで。
また、インターネット、WiFi、マルチキャストロックのアクセス許可を取得してみてください。これらを許可に追加してみてください。
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
ネットワークデータを送信および受信するためにWiFiだけでなく、CのSDKを通してフィルタリングできるあらゆるタイプのネットワークアダプター(LAN、無線)を使用するハウスインアプリケーションにこれらの許可を使用する必要があります(デバイス)ルート化する必要があります)。しかし、これらの許可を使用しても問題ありません。