パケット通信を止める!

パケット通信を止めるには

 パケット通信止める方法としてまず考えられるのがUIMカード(SIMカード)を抜いてしまう方法でしょう。ただわざわざ抜くのもめんどくさいし、他のところにも様々な悪影響を及ぼす可能性があるのであまり実用的ではないでしょう。
 ググってみると一般的にはAPN(アクセスポイントネーム)をわざと変なものに書き換えて通信できなくしてしまう方法がとられているようです。実際androidマーケットにもこの手のアプリが多く存在しています。

やってみる

APNを書き換える方法はググったら一発で見つかりました(Android開発技術録 参考にさせて頂きました!ありがとうございます)

さっそくコピペさせていただいて試してみました。ところが!!我が htcEVO ではAPNの書き換えは出来てもパケット通信が遮断される様子は全くない!どゆこと!? そもそもAPN名が「internet」ってなんだよ(笑)


調べてみるとそもそもauが採用しているCDMA2000という方式ではAPNというものを使ってないらしいことが判明…なんじゃそりゃorz

解決策

じゃどうすればいいのか…いろいろ調べてみるとandroid2.3から非公開APIとして"setMobileDataEnable"というのが存在するらしいです。これをリフレクションで呼び出せば一応パケット通信を止めることが出来るらしい。

試して見ましょう!以下適当メソッド

private toggleMobileDataEnabled(boolean enabled){
    ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
    try{
        Method method=cm.getClass().getMethod("setMobileDataEnabled", new Class[]{Boolean.TYPE});
        method.invoke(cm, enabled);
    }catch(Exception e){
        e.printStackTrace();
    }
}


この手法ならめでたく htcEVO でも動きました!!


そして android2.2搭載のIS05 で試したところ例外をキャッチしたのでやはりandroid2.2以下の端末には通用しないっぽいことも判明…
手動でやれということですか

終わりに

とりあえずパケット通信を遮断するにはAPI書き換え手法が使えそうな端末ならAPN書き換えを、そうでなければ非公開APIの setMobileDataEnable で設定変更を、それもできないauのandroid2.2以下の端末に関してはあきらめろという結論でよろしいでしょうか?


ただandroid2.2以下環境の上で動くパケット通信設定変更するアプリって結構あったような気も…スイッチ系ウィジェットとか。
もうちょっと調べないといけませんな


早速この機能をつかって例のアプリを完成させなければ…