経緯
開発中のアプリでテザリングの切り替えを検知する必要が出てきたので自分用にメモ。
テザリングを切り替えた時のBroadCastを検知する
テザリングの状態を変更した時に次のアクションのIntentがブロードキャストで送信される
"android.net.conn.TETHER_STATE_CHANGED"
このアクションはConnectivityManagerに定義されている非公開のアクションだが、IntentFilterに定義することでブロードキャストを検知できる
AndroidManifest.xml
<receiver android:name=".TetherStateChangedReceiver" >
<intent-filter>
<action android:name="android.net.conn.TETHER_STATE_CHANGED" />
</intent-filter>
</receiver>
TetherStateChangedReceiver.java
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.net.conn.TETHER_STATE_CHANGED")) {
Log.d(TAG, "availableArray:" + intent.getStringArrayListExtra("availableArray"));
Log.d(TAG, "activeArray:" + intent.getStringArrayListExtra("activeArray"));
Log.d(TAG, "erroredArray:" + intent.getStringArrayListExtra("erroredArray"));
}
}
テザリングを切り替えた時のログは以下のようになる。
availableArray:[wlan0] #利用可能なテザリング名
activeArray:[] #今使用しているテザリング名
erroredArray:[] #使用不可能なテザリング名
テザリングの切替時にアクションが複数回走るが、
テザリングをオフにした時は最終的にactiveArrayに空配列が、
テザリングをオンにした時は最終的にactiveArrayにテザリング名が入った配列が取得できるので、それでテザリングが有効かどうか判断できる。