2012-03-08 49 views
1

我有一個要求,我需要開發一個Android應用程序的Nexus S的把所有我周圍可用的網絡運營商。如何使用getAvailableNetworks從機器人/內部/電話/ Phone.java

我已經與大量的博客跟進完成這件事。

首先,它是一個內部/隱藏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" /> ...

任何幫助會爲我是巨大的。

+0

由於這不是SDK的一部分,是什麼讓你認爲它應該以這種方式工作?是什麼讓你認爲它可以在Android的所有版本上發揮作用:過去,現在和將來? – CommonsWare 2012-03-08 13:31:06

+0

我想讓它只在Nexus上工作... – EnthuDeveloper 2012-03-09 06:30:41

回答

2

只是爲了看看有什麼方法可以在ITelephony對象上,而不是使用getDeclaredMethod()試試這個:

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

這應該記錄的可用方法的列表。也許有一種看起來會幫助你。一旦找到你想要的方法,你也可以調用method.getParameterTypes(),它將返回一個類名的數組。這會告訴你方法期望的參數。

但是,它可能無法爲你做你想做的,因爲每個廠商是免費的,因爲他們認爲合適的改變這些東西。

+0

您是否可以確定使用的方法?我很好奇你是否已經解決了這個問題。 – 2012-05-16 12:39:31