一、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. oracle 笔记DBA

    1.1oracle开启归档 关闭数据库 SQL>archive log list; SQL>shutdown immediate; SQL>startup mount ; SQL&g ...

  2. rails 新建user的phonenumber字段

    1.新建字段 //rails g migration add_字段名_to_表名 字段名:字段类型 rails g migration add_title_to_contents title:stri ...

  3. 【转】python 2.6.6升级到python 2.7.x版本的方法

    1.下载python2.7.x wget https://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz 2.解压并编译安装 tar -zxvf Py ...

  4. 定时调度系列之Quartz.Net详解(转)

    出处:https://www.cnblogs.com/yaopengfei/p/9216229.html 一. 背景 我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提 ...

  5. SVD图片有损压缩测试

    注意文件名别保持成svd.m,这样与系统的默认svd程序冲突 图片处理函数生成的三组二维数组对应RGB,处理时保留一组 clear all; close all; clc; a1=imread('C: ...

  6. tflite笔记

    固化模型 方法一:freeze_graph方法 把tf.train.write_graph()生成的pb文件与tf.train.saver()生成的chkp文件固化之后重新生成一个pb文件 with ...

  7. java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory的解决办法

    Tomcat7早就出来正式版,但是一直都没有用过,尤其是针对于我还一直在用Myeclipse6.5的人来说,它在配置tomcat的时候没有tomcat7的选项,所以就报了错误信息. java.lang ...

  8. Typecho 插件开发基础

    <?php /** * 标题 插件说明 * * @package 添加标题 * @author Fan * @version 1.0.0 * @link http://cnblogs.com/f ...

  9. Nios II——定制自己的IP1之Nios接口类型

    信号自动识别的接口前缀 接口前缀 接口类型 asi Avalon-ST宿端口(输入) aso Avalon-ST源端口(输出) avm Avalon-MM主端口 avs Avalon-MM从端口 ax ...

  10. 通过sftp操作Linux服务器上的文件(java)

    本文为实现对linux服务器文件的操作.windows服务器不支持. 引入jar包:jsch-0.1.42.jar package com.csvreader.sftp; import java.io ...