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

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

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

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

voidinvokeOemRilRequestRaw(byte[] data, Message response);

voidinvokeOemRilRequestStrings(String[] strings, Message response);

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

但SDK中没有开放此接口。

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

访问Android内部RIL接口(一)_第1张图片

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

153 publicstaticPhone getDefaultPhone() {
154 if(sLooper != Looper.myLooper()) {
155 thrownewRuntimeException(
156 "PhoneFactory.getDefaultPhone must be called from Looper thread");
157 }
158
159 if(!sMadeDefaults) {
160 thrownewIllegalStateException("Default phones haven't been made yet!");
161 }
162 returnsProxyPhone;
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"需要在源代码编译时才能加进去,不知是否真实,寻求下一个解决方案中。。。。

更多相关文章

  1. ubuntu下载android源代码
  2. Android 框架层为IMountService 增加新接口
  3. Android开发规范:API接口通用设计规范
  4. Android 无线接口层(Radio Layer Interface)
  5. 如何获取android源代码
  6. 基于ffmpeg的Android播放器开源代码
  7. Android ActionBar的源代码分析(一)

随机推荐

  1. android随笔
  2. android学习之RelativeLayout
  3. Android Power Manager分析(转载整理)
  4. android widget之TextView
  5. Android TextView跑马灯效果
  6. android中控件的大部分属性解释
  7. Android OpenGL ES 开发教程小结
  8. Android EditText属性
  9. Android SDK下载用的代理
  10. 【流媒體】Android 实时视频采集—MediaR