1

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を取得します...

私も<uses-permission android:name="android.permission.READ_PHONE_STATE" />アンドロイドマニフェストに設定しました...

どんな助けでも私にとって素晴らしいでしょう。

4

1 に答える 1

2

getDeclaredMethod()を使用する代わりに、ITelephonyオブジェクトで使用できるメソッドを確認するには、次のようにします。

Method[] methods = ITelephonyClass.getDeclaredMethods();
for (Method method : methods) {
    Log.i("Method", "Method name is: "+method.getName());
}

これにより、使用可能なメソッドのリストがログに記録されます。多分それがあなたを助けるように見えるものがあります。必要なメソッドが見つかったら、method.getParameterTypes()を呼び出して、クラス名の配列を返すこともできます。これにより、メソッドが期待するパラメーターがわかります。

ただし、各メーカーは適切と思われるものを自由に変更できるため、希望することを実行できない場合があります。

于 2012-05-11T14:53:00.563 に答える