2012-03-08 1 views
1

Nexus SのAndroidアプリケーションを開発して、私を取り囲むすべての利用可能なネットワーク事業者を獲得する必要があるという要件があります。android/internal/telephony/Phone.javaのgetAvailableNetworksの使い方

私はこれを達成するために多くのブログをフォローしています。

まずそれはだから私はそれを呼び出すために、この方法に従っている内部/隠された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 }); 

は、しかし、私は

すべてのヘルプは私のために素晴らしいことだ...

は私もAndroidのマニフェストに <uses-permission android:name="android.permission.READ_PHONE_STATE" />を設定している... setPrefNetmethod = nullを常に取得します。これは、利用可能なメソッドの一覧をログに記録する必要があり

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

+0

これはSDKの一部ではないため、このように動作するはずです。過去、現在、そして未来のすべてのバージョンのAndroidで動作するとは思うものは何ですか? – CommonsWare

+0

Nexusでのみ動作したいと思っています... – EnthuDeveloper

答えて

2

だけではなく、getDeclaredMethodを(使用しての、方法はITelephonyオブジェクトで利用可能なものを見るためには)これを試してみてください。多分それがあなたを助けるように見えるものがあります。必要なメソッドが見つかると、クラス名の配列を返すmethod.getParameterTypes()を呼び出すこともできます。これは、メソッドがどのパラメータを期待しているかを示します。

しかし、それぞれのメーカーが自由にこの材料を変更することができますので、あなたが望むことはできない場合があります。

+0

使用方法を決定できましたか?私はあなたが問題を解決したように興味があります。 –