访问Android内部RIL接口(一)

最近公司调研一个项目,目的需要在Android平台上发送AT指令到Modem获取相关信息或者进行设置。

 

没有做过Android项目, 但根据经验,Android应该跟windows mobile一样应该有一个RIL中间层,搜索了相关资料,果真如此。

 

接下来查看sdk,但没发现有访问RIL层的接口。

 

查看源代码android-2.2-froyo/com/android/internal/telephony/Phone.java

void invokeOemRilRequestRaw(byte[] data, Message response); 

void invokeOemRilRequestStrings(String[] strings, Message response); 

这两个接口就是我所需要的 

 

但SDK中没有开放此接口。

找了很多资料,通过https://devmaze.wordpress.com/category/android-2/ 上的方法,终于在eclipse里可以访问此接口了

 

 

 

通过Phone localPhone = PhoneFactory.getDefaultPhone();可以得到此接口实例,但问题来了,看看getDefaultPhone()的源代码 

153    public static Phone getDefaultPhone() {
154        if (sLooper != Looper.myLooper()) {
155            throw new RuntimeException(
156                "PhoneFactory.getDefaultPhone must be called from Looper thread");
157        }
158 
159        if (!sMadeDefaults) {
160            throw new IllegalStateException("Default phones haven't been made yet!");
161        }
162       return sProxyPhone;
163    }

 

这样在Activity里尝试拿Phone接口会抛出"PhoneFactory.getDefaultPhone must be called from Looper thread“

 

在android手机里,我的是三星i5700,有一个工程模式*#*#197328640#*#*,进去后可以获得一些信号的信息,这些信息,就是通过特定的AT指令拿到的。

 

adb里pull serviceModeApp.akp出来,解开看看源代码,也是通过 PhoneFactory.getDefaultPhone()来取得Phone接口的,为什么我的就不行?

 

再看看它的 Manifest,看到android:process="com.android.phone",还有android:sharedUserId="android.uid.system"

 

相关资料说android:sharedUserId="android.uid.system" 需要在源代码编译时才能加进去,不知是否真实,寻求下一个解决方案中。。。。

posted on   谷夕  阅读(5745)  评论(1编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
历史上的今天:
2010-04-22 一道SQL面试题

导航

< 2011年4月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
1 2 3 4 5 6 7
点击右上角即可分享
微信分享提示