Android------------------系统服务调用的学习
一、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------------------系统服务调用的学习的更多相关文章
- Android系统服务详解-android学习之旅(95)
本文是看完android框架揭秘第六章后的总结 android系统服务提供最基本的,最稳定的核心功能,如设备控制,信息通知,通知设定,以及消息显示等,存在于Android Framework与Andr ...
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
原文网址:http://cherishlc.iteye.com/blog/1756762 在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在And ...
- Android(java)学习笔记228:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- Android(java)学习笔记171:服务(service)之绑定服务调用服务里面的方法
1.绑定服务调用服务里面的方法,图解: 步骤: (1)在Activity代码里面绑定 bindService(),以bind的方式开启服务 : bindServ ...
- Android(java)学习笔记160:Framework运行环境之 Android进程产生过程
1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...
- Android(java)学习笔记103:Framework运行环境之 Android进程产生过程
1. 前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程 ...
- 在Android中调用WebService
某些情况下我们可能需要与Mysql或者Oracle数据库进行数据交互,有些朋友的第一反应就是直接在Android中加载驱动然后进行数据的增删改查.我个人不推荐这种做法,一是手机毕竟不是电脑,操作大量数 ...
- Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
- 在Android中调用C#写的WebService(附源代码)
由于项目中要使用Android调用C#写的WebService,于是便有了这篇文章.在学习的过程中,发现在C#中直接调用WebService方便得多,直接添加一个引用,便可以直接使用将WebServi ...
- Android(java)学习笔记267:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
随机推荐
- unity3d的执行顺序
- kbmmw 5.06.20 发布
经过1个多月的测试,终于发布正式版. 5.06.20 July 11 2018 Important notes (changes that may break existing c ...
- 2018.10.31 bzoj3339&&3585mex(主席树)
传送门 双倍经验 直接上主席树,每个叶节点维护这个值出现的最右区间,非叶子节点维护当前值域内所有最右区间的最小值. 查询的时候只用在以root[qr]root[qr]root[qr]为根的树上面二分. ...
- Win7 VS2015环境编译NanoVG
书接上回,Cairo编译好使用后,发现简单的每帧画100条随机线段就卡得不行,装了个gooreplacer( http://liujiacai.net/gooreplacer/ )上stackover ...
- IntelliJ IDEA 2017版 spring-boot 2.0.5 邮件发送简单实例 (三)
一.搭建SpringBoot项目 详见此文:https://www.cnblogs.com/liuyangfirst/p/8298588.html 注意: 需要添加mail依赖的包,同时还添加了lom ...
- MarkDown总结
转载自:https://www.jianshu.com/p/q81RER:做了一些部分修改: 一:总纲 1.所有的格式均要空格,如#后面加个空格,-后面加空格,1.后面加空格等等: 2.双向包裹的不能 ...
- VESA时序与BT1120的区别
在实现内嵌传输的过程中,笔者参考VESA的时序,也就是下图,实现了一个内嵌同步的程序,同步码放在H Back Porch与H Front Porch的后端与前端,但是在传输过程中发现接收端画面不正常. ...
- AngularJS监听数组变化
我们在使用angualr的监听时候,业务的需要我们会去监听一个数组的某一个值得变化,再写逻辑代码.然而我们在使用$scope.$watch("",function(){ })时候会 ...
- winSockets编程(三)最简单的C/S形式
功能:向服务器端发送一个字符串,属于最简易的形式,一共需要4个主要步骤,初始化-建立套接字-连接服务器-发送数据 /****************************************** ...
- hdu2222(ac自动机模板)
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #inclu ...