このコードを使用して、アプリケーションでインターネット 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 です 何かアイデアはありますか? 人々が同じ問題を報告し始めているのではないかと心配しています。