2012-03-08 5 views
1

У меня есть требование, когда мне нужно разработать приложение для Android для Nexus S, чтобы охватить все доступные сетевые операторы.Как использовать getAvailableNetworks от android/internal/telephony/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 = нуль всегда ...

Я даже установить <uses-permission android:name="android.permission.READ_PHONE_STATE" /> в андроида манифеста ...

Любая помощь будет большим для меня.

+0

Поскольку это не является частью SDK, почему вы думаете, что он должен работать таким образом? Что заставляет вас думать, что он будет работать на всех версиях Android: прошлом, настоящем и будущем? – CommonsWare

+0

Я хочу, чтобы он работал только на Nexus ... – EnthuDeveloper

ответ

2

Просто, чтобы увидеть, какие методы доступны на объекте ITelephony, вместо того, чтобы использовать getDeclaredMethod() попробуйте это:

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

Это должно войти в список доступных методов. Может быть, есть тот, который выглядит так, как будто это вам поможет. Как только вы найдете нужный метод, вы также можете вызвать метод method.getParameterTypes(), который вернет массив имен классов. Это покажет вам, какие параметры ожидает этот метод.

Однако, возможно, вам не удастся сделать то, что вы хотите, так как каждый производитель может свободно менять этот материал по своему усмотрению.

+0

Вы могли определить способ использования? Мне любопытно, разрешили ли вы проблему. –