如何使用来自android/internal/telephoney/Phone.java的getAvailableNet



我有一个要求,我需要为Nexus S开发一个Android应用程序,以获得我周围所有可用的网络运营商。

我已经跟进了很多博客来完成这项工作。

首先,它是一个内部/隐藏的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" />。。。

任何帮助对我来说都很好。

只想看看ITelephony对象上有什么方法可用,而不是使用getDeclaredMethod(),试试这个:

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

这应该记录可用方法的列表。也许有一个看起来会对你有所帮助。找到所需的方法后,还可以调用method.getParameterTypes(),它将返回一个类名数组。这将告诉您该方法需要什么参数。

然而,你可能不可能随心所欲,因为每个制造商都可以根据自己的意愿自由更改这些东西。

相关内容

  • 没有找到相关文章

最新更新