Android / Internale / Telephony / Phone.javaからGetAvailableNetworksを使用する方法
-
09-12-2019 - |
質問
私は私を取り巻くすべての利用可能なネットワーク事業者を取得するためにNexus SのためのAndroidアプリケーションを開発する必要がある要件を持っています。
これを行うために多くのブログをフォローアップしています。
最初に内部/非表示のAPI です。
だから私はそれを呼び出すためにこの方法を続けています。
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());
Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");
getITelephonyMethod.setAccessible(true);
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());
setPrefNetmethod = ITelephonyClass.getDeclaredMethod(
"getAvailableNetworks", new Class[] { Message.class });
Message response = Message.obtain();
setPrefNetmethod.setAccessible(false);
setPrefNetmethod.invoke(ITelephonyStub, new Object[] { network_mode, response });
.
しかし私はsetprefnetmethod= nullを常に...
Androidマニフェストに<uses-permission android:name="android.permission.READ_PHONE_STATE" />
を設定しました...
私のために任意の助けが素晴らしいでしょう。
解決
getDeclaredMethod()を使用する代わりに、IteLephonyオブジェクトでどのメソッドを利用できるかを確認するだけです。
Method[] methods = ITelephonyClass.getDeclaredMethods();
for (Method method : methods) {
Log.i("Method", "Method name is: "+method.getName());
}
.
これは利用可能なメソッドのリストを記録する必要があります。たぶんそれがあなたを助けるように見えるものがあるかもしれません。必要なメソッドが見つかったら、クラス名の配列を返すMethod.getParameterTypes()を呼び出すこともできます。これにより、メソッドがどのようなパラメータが予想されるかを説明します。
しかし、各製造業者がフィットするにつれてこのものを自由に変更することができるので、あなたが望むものをすることができないかもしれません。
所属していません StackOverflow