モバイルデータのON・OFFを切り替える機能について

よく、Cronoidのユーザーのかたから、以下の様な問い合わせを受けます。

「設定変更のアクションで、モバイルデータのON、OFFを変更する事はできないか?」

というものです。

古くからのユーザーのかたは、ご存知かもしれませんが、Cronoidでは、以前はこの機能を提供していました。

というか、厳密には現在でも同機能を提供しているのですが、Android のバージョンによって、使用可否が異なります。

Cronoidの仕様

Cronoidとしては、Androidのバージョンが、5.0(Lollipop)以上の場合、モバイルデータのON・OFFの変更は、アクション入力時に選択項目として表示しないようにしています。
そのため、バージョンが、4系のものであれば、同機能を使用することができます。(画面上に選択項目として表示されます)

なぜバージョン5.0以上では使用できないのか?

Android OSの仕様変更により、モバイルデータの設定を変更するためのAPIは、システム権限を持ったアプリでないと、使用できなくなってしまったためです。

つまり「設定」のような、システム権限を持ったアプリは、同設定を変更できますが、Cronoidのような、サードパーティのアプリは、システム権限を持つことができないため、モバイルデータの設定を変更するためのAPIを使用することができないのです。
この仕様変更は、恐らく、セキュリティ上の懸念からそうしたものと思われます。

Cronoidとしては、使用不可能な機能を画面上に表示しても意味がないため、Androidのバージョンによって、モバイルデータのON・OFFを選択項目から、非表示にしているというわけです。

元々、非公開のAPIを使用していた

モバイルデータのON・OFFの設定変更を行うためのAPIは、Androidとしては、元々公開されているものではなく、privateメソッドとして実装されていました。

privateメソッドに対して、外部から通常通りのアクセスをすることはできないため、リフレクションを使用して、同メソッドにアクセスしていました。(モバイルデータのON・OFFを変更する機能を持つアプリは皆同様の方法で実現していたと思われます)

ConnectivityManager cm = (ConnectivityManager) 
    context.getSystemService(Context.CONNECTIVITY_SERVICE);
Object[] args = new Object[]{"1".equals(value)};
invoke(ConnectivityManager.class, cm, "setMobileDataEnabled", args);
※上記のコード中のinvokeメソッドは独自に作成したものです

将来のバージョンで使用可能になるか?

今のところ、Androidの将来のバージョンで、この使用不可能になったAPIが、一般アプリの権限で使用可能になるとという情報はありません。

もちろん、将来のバージョン使える様になれば、Cronoidはすぐに対応するつもりですが、望みは薄そうです。

コメント

このブログの人気の投稿

イヤホンを挿したらGoogle Play Musicアプリを自動起動する

不要になったAndroid端末を定点カメラにして写真を自動撮影する

Cronoidが誕生するまで