2011年12月10日土曜日

[Android] アプリケーションでデータ通信のオン・オフを設定できない理由

Reasons for failing to switch mobile networks

データ通信をオン・オフするアプリケーションを作ろうとしたら、不可能であることがわかりました。
1.隠しメソッド
データ通信をオン・オフするための機能はTelephonyManagerクラスにあるのですが、隠しメソッド(@hideアノテーション)のためアクセスできません。
隠しメソッドにアクセスするためリフレクションを使うとこんなコードになります。

※ユーザーインターフェースの実装を省略しているのでこのままでは動きません

これにユーザーインターフェースを実装してアプリケーションとして完成させるとエミュレーターで動作することは確認できました。

2.パーミッション
上のソースは実機は動作しません。
動作させるためのパーミッションが2つあります。
android.permission.MODIFY_PHONE_STATE
android.permission.WRITE_SECURE_SETTINGS

このうち、WRITE_SECURE_SETTINGSはアプリケーションがマニフェストに宣言しても実機での動作では許可されてません。
データ通信の他、bluetoothの設定変更もWRITE_SECURE_SETTINGSが必要なようです。

ユーザーの知らないうちに勝手にデータ通信やbluetoothの設定を変えられたら不都合なので、セキュリティーレベルが高くされているのは仕方ないかもしれません。

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿