搞清phoneapp, telephonymanager, telephonyservice的关系

1 package com.android.phone; 是phone app,特权应用 2 package android.telephony是对SDK developer开放的,TelephonyManager, PhoneStateListener等类,功能很有限 3 package com.android.internal.telephony; 是Framework里的telephony, 不对SDK developer开放。其中包含: 一个非常清晰好用的ITelephony interface, 和另外一些CallManager, Phone, Call, Connection重要class,比较复杂难懂 理论上,phoneapp使用ITelephony (或者叫telephony service)的最标准方法是TelephonyManager,来完成call/endCall等操作, 由于安全考虑,call/endCall等方法都没有被TelephonyManager支持, 所以phoneapp必须直接调用framework内部的telephone service api ,由于phone app是在system(root?)权限下运行的"特权应用",这是可以做到的。 关于ITelephony接口,aidl方式,十分强大,方法清晰简单,call, dial, endCall等n多功能 com/android/internal/telephony/ITelephony.aidl 实现的类 PhoneInterfaceManager extends ITelephony.Stub 而PhoneInterfaceManager位于com.android.phone包里 也就是说,telephony service的实现在phone app里面...... 怎么会这样.... 如何得到ITelephony, 基本答案是得不到 对于特权phone app,参考PhoneWindowManager.java的方式 1403 static ITelephony getTelephonyService() { 1404 ITelephony telephonyService = ITelephony.Stub.asInterface( 1405 ServiceManager.checkService(Context.TELEPHONY_SERVICE)); //为什么不是ServiceManager.getService("phone")? 1406 if (telephonyService == null) { 1407 Log.w(TAG, "Unable to find ITelephony interface."); 1408 } 1409 return telephonyService; 1410 } 反射的方式,相关文章很多,但2.3上不工作,主要是MODIFY_PHONE_STATE变成了system level permission, 第三方应用无法获得。 不错的参考文章: http://hi.baidu.com/weiyousheng/blog/item/a7255ef4e2438c7dddc4748c.html http://www.360doc.com/content/11/0222/11/474846_95043329.shtml http://newfaction.net/2011/03/15/android-2-2-ril-java-part-of-the-code-profile.html http://www.cnblogs.com/Tiger-Dog/articles/2056273.html http://www.meegozu.com/thread-391-1-1.html android 1.1的telephony相关文章,很老,结构已经发展了,但仍可以借鉴 http://www.kandroid.org/online-pdk/guide/telephony.html http://www.linuxjournal.com/magazine/java-api-androids-telephony-stack http://www.netmite.com/android/mydroid/development/pdk/docs/telephony.html

更多相关文章

  1. 【Android】实现Activity页面暂停几秒后跳转的两种方法
  2. android实现图片圆角化实现三种方法
  3. “android list targets 无target显示” 的解决方法。
  4. Android开发中获取本机Mac地址和IP地址的方法
  5. 第四例:Intent启动Activity的几种方式(一)
  6. android 背景边框变圆角的几种方法
  7. Android Studio 中module需要单独引用jdk的方式
  8. Android Studio获取SHA1证书方法

随机推荐

  1. Android随笔之标题栏的去除以及自定义
  2. Android(安卓)界面刷新
  3. android之File,Saving State,Preferences
  4. Android学习开发之路~~系列教程
  5. Android(安卓)对话框AlertDialog和AlertD
  6. Android屏幕解锁和点亮
  7. android将发送短信写入发件箱
  8. [置顶] Android如何保证一个线程最多只能
  9. Android(安卓)websocket长连接+点对点订
  10. Flutter遇到的坑