1

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

任务- 在有根手机 (Android 2.3.3) 上获取可用的网络运营商。型号已知。

我试过什么

很多反思:

  • 试图得到PhoneFactory,得到默认PhonegetDefaultPhone)或GSMPhone。我收到了一个实际的参考PhoneProxy并且能够调用getAvailableNetworks它返回一个CommandException- RADIO_NOT_AVAILABLE
  • 试图RIL直接实例化。尝试以getAvailableNetworks相同的结果调用此处(RADIO_NOT_AVAILABLE)。试图调用registerForAvaiable它永远不会将消息发送回处理程序。
  • 试图连接LocalSocket到“rild”。得到IOException: Permission denied

我已经使用存储在我的应用程序尝试了上述所有/system/app/操作 - 结果是相同的。

问题

  1. 甚至可以在RIL不使用系统密钥签署我的应用程序或使用自定义 Android 构建的情况下访问方法吗?
  2. 也许我可以通过直接为 Linux 构建应用程序来克服这个问题?
  3. 非常感谢有关此问题的任何建议。
4

2 回答 2

4

有趣的问题 - 如果我们可以访问 RIL,那就太好了。

在 XDA 上,我有时会找到显示 RIL 信息的应用程序。当我仔细观察时,我通常会发现他们正在调用键盘代码,然后解析输出 - 而不是调用 API。哦,这是其中一个应用程序。(此方法是特定于制造商的。)
http://forum.xda-developers.com/showthread.php?t=1687249

这是关于PhoneFactory等的帖子。
https://stackoverflow.com/a/6504808/150016

这里有一个关于该主题的很好的讨论:
可以通过 sdk 实例化一个 telephony.Phone 对象吗?

于 2013-04-10T16:09:01.600 回答
3

您可以构建自己的 RIL 实现。您可以通过设置 android 属性 rild.lib 来告诉 Android 加载您的库。在有根手机上,你可以做

getprop | grep ril

查看您当前使用的 rild 库。

有针对 sierra gsm 加密狗/华为加密狗等的开源 ril 实现。你会有所了解。

但并非一切都容易实现。使用这种机制,您只能实现 android 对您进行的回调。例如,它不允许您进行数据漫游连接。这仍然由 android 框架控制。

要将您当前的 rild 库更改为您自己的,您可以设置

setprop rild.lib \system\modules\yourlibrary.so 

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

于 2013-07-12T02:23:05.017 回答