はい久しぶりにコード系書きます。
ちょいとアプリに入れるかもしれないのでまじめに考えてみました。
といっても古いコードなんですがね。。
なにかというと機内モード確認と変更(OS4.2以前)の方法です。
まだ2.3とか普通にメジャーOSなので需要はまだあるんじゃないという事で。
色々ネットにはころがってますが基本以下ですね。
■確認------------------------
■変更------------------------
とここまではよく書かれてるんですが、まぁ端末によってはうごかないっす。
というか動いているんだけどネットワークがおかしくなり要再起動になります。
じゃあどうするのかというと
sendBroadcastのあとにSystemClock.sleep()で待機時間はさみます。
*これ端末によるのかもですがThread.sleep()だと自分のはだめだった。
あとスレッドとかの非同期系も使えんかった・・・
これでいくようになるんじゃないかなと思いますがまだ問題があります。
ボタンとかで切り替えできるようにした場合、連続して切り替えると同じようにおかしくなります。
ためしに連続できるタイプのアプリは切替まくると結構死にますね。。。
ここの対策ですがやり方は人によると思います。
なので私が思ったのを書きますが、
ACTION_AIRPLANE_MODE_CHANGEDでフックしたらその時間を処理終了時間ということでプリファレンスに保存しておき。
if(今の時間-前回終了時間 > 任意の最低待ち時間)
で判断します。
とりあえず3000msくらい待ち時間あれば何とかなるかも?
*ACTION_AIRPLANE_MODE_CHANGEDで変更を検知したらOKとかだとまだ待機が必要らしくこの方法しか思いつかなかった。。。
というわけでそんな対応をしたプロジェクトを下記においてみます。
ちょいとアプリに入れるかもしれないのでまじめに考えてみました。
といっても古いコードなんですがね。。
なにかというと機内モード確認と変更(OS4.2以前)の方法です。
まだ2.3とか普通にメジャーOSなので需要はまだあるんじゃないという事で。
色々ネットにはころがってますが基本以下ですね。
■確認------------------------
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else {
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
■変更------------------------
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
Settings.System.putInt(getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, enable ? 1 : 0);
Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
intent.putExtra("state", enable);
sendBroadcast(intent);
}
OS4.2以降はもうこれ使えないので設定(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS)に飛ばしましょう。
やるなら要root化です。あとSettings.System > Settings.Globalになるので気をつけてくらさい。
------------------------
OS4.2以降はもうこれ使えないので設定(android.provider.Settings.ACTION_AIRPLANE_MODE_SETTINGS)に飛ばしましょう。
やるなら要root化です。あとSettings.System > Settings.Globalになるので気をつけてくらさい。
------------------------
とここまではよく書かれてるんですが、まぁ端末によってはうごかないっす。
というか動いているんだけどネットワークがおかしくなり要再起動になります。
じゃあどうするのかというと
sendBroadcastのあとにSystemClock.sleep()で待機時間はさみます。
*これ端末によるのかもですがThread.sleep()だと自分のはだめだった。
あとスレッドとかの非同期系も使えんかった・・・
これでいくようになるんじゃないかなと思いますがまだ問題があります。
ボタンとかで切り替えできるようにした場合、連続して切り替えると同じようにおかしくなります。
ためしに連続できるタイプのアプリは切替まくると結構死にますね。。。
ここの対策ですがやり方は人によると思います。
なので私が思ったのを書きますが、
ACTION_AIRPLANE_MODE_CHANGEDでフックしたらその時間を処理終了時間ということでプリファレンスに保存しておき。
if(今の時間-前回終了時間 > 任意の最低待ち時間)
で判断します。
とりあえず3000msくらい待ち時間あれば何とかなるかも?
*ACTION_AIRPLANE_MODE_CHANGEDで変更を検知したらOKとかだとまだ待機が必要らしくこの方法しか思いつかなかった。。。
というわけでそんな対応をしたプロジェクトを下記においてみます。
>>>こちら
*Android Studioで作ってあるのでご注意。
*無駄importあるのはすいません!Studio使いなれてなくて手動で消すのがだるかったんです。。
どなたかたの参考になればよいです。
てか逆にもっといい方法があれば教えてください。
*Android Studioで作ってあるのでご注意。
*無駄importあるのはすいません!Studio使いなれてなくて手動で消すのがだるかったんです。。
どなたかたの参考になればよいです。
てか逆にもっといい方法があれば教えてください。