免责声明 - 我知道调用非API方法会如何影响我的应用程序。它不会在Google Play上发布,我只是为了个人用途而创建它。
任务 - 在root手机上获取可用的网络运营商(Android 2.3.3)。模型是众所周知的。
我尝试了什么
很多反思:
PhoneFactory
,获取默认Phone
(getDefaultPhone
)或GSMPhone
。我收到了对PhoneProxy
的实际引用,并且能够致电getAvailableNetworks
并返回CommandException
- RADIO_NOT_AVAILABLE RIL
。试图在这里用getAvailableNetworks
调用相同的结果(RADIO_NOT_AVAILABLE)。试图调用永远不会向Handler发回消息的registerForAvaiable
。LocalSocket
连接到“rild”。获取IOException: Permission denied
我已尝试将我的应用存储在/system/app/
上面的所有内容 - 结果相同。
问题
RIL
方法?答案 0 :(得分:4)
有趣的问题 - 如果我们能够访问RIL会很棒。
在XDA上我有时会找到显示RIL信息的应用程序。当我仔细观察时,我通常会发现他们正在调用键盘代码,然后解析输出 - 而不是调用API。哦,这是其中一个应用程序。 (此方法是制造商特定的。)
http://forum.xda-developers.com/showthread.php?t=1687249
这是一篇关于PhoneFactory等的帖子 https://stackoverflow.com/a/6504808/150016
以下是关于该主题的非常好的讨论:
Can a telephony.Phone object be instantiated through the sdk?
答案 1 :(得分:3)
您可以构建自己的RIL实现。您可以通过设置android propety rild.lib来告诉Android加载您的库。 在root用户手机上你可以做到
getprop | grep ril
查看您当前使用的rild库。
有sierra gsm dongles / huawei dongles等的开源实现。 你会有一个想法。
但并非一切都很容易实现。有了这个机制,你只能实现android给你的回调。例如。它不允许您进行数据漫游连接。这仍然是由android框架控制的。
要将当前的rild库更改为您自己的rild库,您可以设置
setprop rild.lib \system\modules\yourlibrary.so