1

このコードを使用して、アプリケーションでインターネット 3G データを有効または無効にします。隠されたリフレクション機能などについていくつかの質問を読みましたが、非常に異なるAndroidリリースの何千もの電話で非常にうまく機能していました(私のアプリケーションはPlayStoreにあり、問題はありませんでした)。しかし、電話がこれができない人を見つけたので心配です。最初に、私が使用するコードを示しましょう。

 try
 {  final ConnectivityManager conman = (ConnectivityManager) MyContext.getSystemService(Context.CONNECTIVITY_SERVICE);
    if(conman == null) return false;
    Class conmanClass = Class.forName(conman.getClass().getName());
    if(conmanClass == null) return false;
    Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
    if(iConnectivityManagerField == null) return false;
    iConnectivityManagerField.setAccessible(true);
    Object iConnectivityManager = iConnectivityManagerField.get(conman);
    if(iConnectivityManager == null) return false;
    Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
    if(iConnectivityManagerClass == null) return false;
    Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
    if(setMobileDataEnabledMethod == null) return false;
    setMobileDataEnabledMethod.setAccessible(true);
    setMobileDataEnabledMethod.invoke(iConnectivityManager, true/false); //Here is where you choose to enable or to disable
    return true; //Everything went OK
 }catch(Exception e)
 {  return false;
 }

エラーは次のとおりです。

Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");

この結果:

java.lang.NoSuchFieldException: mService

その電話は Jelly Bean 4.1.1 を使用した Samsung Galaxy SII です 何かアイデアはありますか? 人々が同じ問題を報告し始めているのではないかと心配しています。

4

1 に答える 1

1

どうやら、Samsung (またはおそらく ROM mod の作成者) がそのクラスを書き直し、 という名前のデータ メンバーがなくなったようmServiceです。これは完全に彼らの権利の範囲内です。彼らの変更が CTS でカバーされているものを壊さない限り、彼らはフレームワーク クラスの内部実装でやりたいことをすることができます。これが、私や他の Android の専門家が開発者に、あなたが使っているようなスクリプトキディのトリックに頼らないように言っている理由です。

「インターネット 3G データの有効化または無効化」がアプリにとって重要であり、これが Samsung Galaxy SII のストック ROM に影響していると判断した場合は、Play ストアを通じてそのようなデバイスへの配布をブロックする必要があります。

「インターネット 3G データの有効化または無効化」がアプリにとって重要でない場合は、「申し訳ありませんが、この機能は利用できません」などの例外ハンドラを追加してください。

于 2013-03-20T12:39:32.803 に答える