android - 如何从 android/internal/telephony/Phone.java 使用 getAvailableNetworks

标签 android reflection telephony nexus-s telephonymanager

我有一个要求,我需要为 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...

我什至设置了<uses-permission android:name="android.permission.READ_PHONE_STATE" />在 android list 中...

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

最佳答案

只是为了查看 ITelephony 对象上有哪些方法可用,而不是使用 getDeclaredMethod() 试试这个:

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

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

但是,您可能无法按照自己的意愿行事,因为每个制造商都可以根据自己的意愿自由更改这些内容。

关于android - 如何从 android/internal/telephony/Phone.java 使用 getAvailableNetworks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9614312/

相关文章:

java - Boolean.FALSE 不等于 false

python - 在Python中将列表动态分解为变量

java - 如果我想构建一个不需要使用 gsm 调制解调器的 java 应用程序,有什么办法吗?

mysql - 数据库优化/规范化 - 外键出现在 "too many"表中

java - 如何将这些按钮添加到我的主要 Activity 中?

Android 完成 Activity 错误

android - 未注释的参数覆盖@NonNull 参数

android - 无法从 Android 手机访问 Apache 服务器

c# - c#中如何获取当前执行方法的输出参数列表?

c# - Windows Mobile 6 接听多个电话