Как использовать getAvailableNetworks из Android / внутреннего / телефонии / Phone.java - PullRequest
1 голос
/ 08 марта 2012

У меня есть требование, при котором мне нужно разработать приложение для Android для Nexus S, чтобы получить доступ ко всем доступным сетевым операторам вокруг меня.

Я следил за множеством блогов, чтобы сделать это.

Во-первых, это внутренний / скрытый 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" /> в манифесте Android ...

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

1 Ответ

2 голосов
/ 11 мая 2012

Чтобы увидеть, какие методы доступны для объекта ITelephony, вместо использования getDeclaredMethod () попробуйте следующее:

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

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

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

...