一、ServiceManager的方法: 此方法getService,用于根据名称获取当前的IBinder的代理(并没有直接获取服务),

              服务提供的功能是依靠IBinder间接调用的(返回值IBinder)

 // 在真机的环境中是有此类: android.os.ServiceManager 因此我们可以采用Java反射机制来获取
 Class clazz = Class.forName("android.os.ServiceManager");
 Method method = clazz.getMethod("getService", String.class);
 // 系统注册的服务都可以在Context中查看
 IBinder iBinder = (IBinder) method.invoke(null,
 Context.TELEPHONY_SERVICE);
 // 获取系统提供的ITelephony服务

 //它binderService哪个服务,通过serviceConnect就可以回传得到,telephony就会得到回传的那个服务
 ITelephony telephony = (ITelephony) ITelephony.Stub.asInterface(iBinder);

二、Content.getSystemService : 是用来获取服务管理器(不是服务),对服务的监听,符合事件的处理

               都要通过服务管理器完成的,系统默认管理器(返回相应的服务管理器的对象)

  

  // TelephonyManager:是Telephony服务的管理类.
  tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

三、打电话经常用到的两个文件

  1.TelephoneManager : 是Telephony服务的管理类.

  2.PhoneStateListener : 手机监听状态

  电话的大致流程:  

  //获得当前的Telephony服务的管理类

  tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);

  //启动对Telephony的监听

  tm.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);  

  private PhoneStateListener phoneStateListener = new PhoneStateListener() {

  @Override
  // 当手机电话的状态发生变化,则此方法会调用
  public void onCallStateChanged(int state, String incomingNumber) {
  switch (state) {
  case TelephonyManager.CALL_STATE_IDLE:
  Log.i("jxy", "空闲.........");
  break;
  case TelephonyManager.CALL_STATE_RINGING:
  Log.i("jxy", "响铃.........");
  if (incomingNumber.equals("110")) {
  endCall();
  }
  break;
  default:
  Log.i("jxy", "接通.........");
  break;
    }
  }

};

四、调用系统服务的一些注意事项

  1.不能在Activity中去注册系统服务,这样下次启动服务的时候会重复注册。

   应该用我们自己的服务去调用系统的服务,应该使用startService,不能使用

   binderService。因为使用binderService,Activity销毁的时候就会解绑,通话就会断开

  

Android------------------系统服务调用的学习的更多相关文章

  1. Android系统服务详解-android学习之旅(95)

    本文是看完android框架揭秘第六章后的总结 android系统服务提供最基本的,最稳定的核心功能,如设备控制,信息通知,通知设定,以及消息显示等,存在于Android Framework与Andr ...

  2. 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码

    原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...

  3. Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  4. Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法

    1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 :                     bindServ ...

  5. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  6. Android(java)学习笔记103:Framework运行环境之 Android进程产生过程

    1. 前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程 ...

  7. 在Android中调用WebService

    某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...

  8. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  9. 在Android中调用C#写的WebService(附源代码)

    由于项目中要使用Android调用C#写的WebService,于是便有了这篇文章.在学习的过程中,发现在C#中直接调用WebService方便得多,直接添加一个引用,便可以直接使用将WebServi ...

  10. Android(java)学习笔记267:Android线程池形态

    1. 线程池简介  多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力.     假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...

随机推荐

  1. Mvvm Light 无法添加MvvmView(Win81)的问题

    After I create a MvvmLight(Win81) project, I want add a new view , but there is only MvvmView(Win8), ...

  2. canvas 实现时钟效果

    var clock = document.getElementById('clock'); var cxt = clock.getContext('2d'); function drawClock() ...

  3. ORACLE rollup函数

    rollup函数应用场景: 主要使用在 分组中,将每个分组求汇总值(就是小计),最后再讲所有值(除去小计)求和(就是合计) 当然,使用union 也可以达到同样的效果.先将需要查询的分组查出来,再un ...

  4. Mysql导入excel数据,解决某些特殊字符乱码问题

    问题 做项目需要从excel表格导入到mysql的数据库表中,excel表格中的“规格”字段的“×”符号导入数据库表中,会出现部分数据的“×”这个符号会乱码,成“?”的形式. 解决方法 打开excel ...

  5. 2019.02.09 bzoj4455: [Zjoi2016]小星星(容斥原理+dp)

    传送门 题意简述:给一张图和一棵树(点数都为n≤17n \le17n≤17),问有多少种给树的标号方法方法使得图中去掉多余的边之后和树一模一样. 思路: 容斥好题啊. 考虑fi,jf_{i,j}fi, ...

  6. BEM思想之彻底弄清BEM语法

    BEM的意思就是块(block).元素(element).修饰符(modifier),是由Yandex团队提出的一种前端命名方法论.这种巧妙的命名方法让你的CSS类对其他开发者来说更加透明而且更有意义 ...

  7. 视图,sql注入问题,事物,存储过程

    视图:本质是一张虚拟的表数据来自select语句用途是保障原表安全 功能1:隐藏部分数据,开放指定数据功能2:因为视图可以将查询结果保存的特性,我们可以用视图来达到减少书写sql语句的功能 例如:se ...

  8. 批量插入,批量修改的sql

    sql 1  批量插入 <insert id="batchInsert" useGeneratedKeys="true" parameterType=&q ...

  9. 笔记本真机安装centos7

    突然有一天,想要装linux系统,所以就是去装,网上百度说的都很多,而且说来说去都是那几篇,大同小异,所以想通过自己本次装真机的一些经验提供给各位朋友参考一下. 一安装系统: 1先制作启动盘,用个比较 ...

  10. 【python】鼠标操作

    [python]鼠标操作 推荐地址:http://www.cnblogs.com/fnng/p/3288444.html --------------------------------------- ...