如何获得可用的网络运营商? (使用RIL和非API方法)

时间:2013-04-10 15:04:40

标签: android ril

免责声明 - 我知道调用非API方法会如何影响我的应用程序。它不会在Google Play上发布,我只是为了个人用途而创建它。

任务 - 在root手机上获取可用的网络运营商(Android 2.3.3)。模型是众所周知的。

我尝试了什么

很多反思:

  • 尝试获取PhoneFactory,获取默认PhonegetDefaultPhone)或GSMPhone。我收到了对PhoneProxy的实际引用,并且能够致电getAvailableNetworks并返回CommandException - RADIO_NOT_AVAILABLE
  • 试图直接点击RIL。试图在这里用getAvailableNetworks调用相同的结果(RADIO_NOT_AVAILABLE)。试图调用永远不会向Handler发回消息的registerForAvaiable
  • 试图将LocalSocket连接到“rild”。获取IOException: Permission denied

我已尝试将我的应用存储在/system/app/上面的所有内容 - 结果相同。

问题

  1. 是否可以在不使用系统密钥或使用自定义Android版本签署我的应用的情况下访问RIL方法?
  2. 也许我可以通过直接为Linux构建应用程序来解决这个问题?
  3. 对此问题的任何建议都非常感谢。

2 个答案:

答案 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 

另见http://www.kandroid.org/online-pdk/guide/telephony.html