Pergunta

Tenho um requisito em que preciso desenvolver um aplicativo Android para Nexus S para obter todas as operadoras de rede disponíveis ao meu redor.

Tenho acompanhado muitos blogs para fazer isso.

Em primeiro lugar, é uma API interna/oculta

Então eu segui este método para chamá-lo.

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 });

Mas recebo setPrefNetmethod = null sempre...

Eu até configurei <uses-permission android:name="android.permission.READ_PHONE_STATE" /> no manifesto do Android...

Qualquer ajuda seria ótima para mim.

Foi útil?

Solução

Apenas para ver quais métodos estão disponíveis no objeto ITelephony, em vez de usar getDeclaredMethod() tente isto:

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

Isso deve registrar uma lista dos métodos disponíveis.Talvez haja um que pareça que irá ajudá-lo.Depois de encontrar o método desejado, você também pode chamar method.getParameterTypes() que retornará uma matriz de nomes de classes.Isso lhe dirá quais parâmetros o método espera.

No entanto, pode não ser possível fazer o que deseja, pois cada fabricante é livre para alterar essas coisas conforme achar necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top