Service之来电监听(失败的案例)
Service:服务,可以理解成一个运行再后台没有界面的Activity,集成于Seriver,是四大组件之一
Service的继承关系:Service-->ContextWrapper-->Context (与activity一样,都继承与ContextWrapper);
生命周期:Context.startSeriver() 方法开启服务:onCreate()-->onStartCommand()-->onDestory();
第一次开启服务,服务会执行onCreate()-->onStartCommand();(开启之后再开启服务,不会执行onCreate()方法);
Context.bindSeriver() 方法开启服务:onCreate()-->onBind()-->onUnbind()-->重载的方法返回true-->Rebind()-->onDestory();
开启 :
方式一:startService();
方式二:bindService();
停止:
方式一:stopService();
方式二:unBind();
下面开始我们的来电监听:
实现创建一个类继承与Seriver:
public class MyService extends Service {
//创建一个录音机的实例
MediaRecorder recorder = null;
//绑定服务
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
//解绑服务
@Override
public void unbindService(ServiceConnection conn) {
super.unbindService(conn);
}
//重新绑定服务
@Override
public void onRebind(Intent intent) {
super.onRebind(intent);
}
//创建一个Service 第一次开启的时候
@Override
public void onCreate() {
Log.i("wei","onCreate");
TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
tm.listen(new MyPhoneStateSeriverListener(),PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("wei","onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("wei","onDestroy");
}
private class MyPhoneStateSeriverListener extends PhoneStateListener{
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state){
case TelephonyManager.CALL_STATE_IDLE://空闲状态
if (recorder!=null){
recorder.stop();
recorder.reset();
recorder.release();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
recorder.start();//开始录音
break;
case TelephonyManager.CALL_STATE_RINGING://响铃状态
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);//设置音频的来源 MIC只能录单方的,VOICE_CALL可以录双方的
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频的输出格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频的编码方式
recorder.setOutputFile("/mnt/sdcard/luyin.3gp");//设置录音文件的存储位置
try {
recorder.prepare();//准备录音
} catch (IOException e) {
e.printStackTrace();
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
}
Manifest.xml配置:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
报错,空指针异常。
Service之来电监听(失败的案例)的更多相关文章
- Android来电监听和去电监听
我觉得写文章就得写得有用一些的,必须要有自己的思想,关于来电去电监听将按照下面三个问题展开 1.监听来电去电有什么用? 2.怎么监听,来电去电监听方式一样吗? 3.实战,有什么需要特别注意地方? 监听 ...
- nodejs 80端口监听失败及NODE_PATH不起作用的问题
nodejs做web服务器,打开80时报错:Error: listen EACCES 0.0.0.0:80 80端口监听失败,是因为1024以下的端口需要root权限,需要sudo或su之后执行.但这 ...
- android 呼入电话的监听(来电监听)转
需要权限: <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 方式一:通过广 ...
- ios应用来电监听
先导入这两个头文件,库文件不用导可以 #import <CoreTelephony/CTCallCenter.h> #import <CoreTelephony/CTCall.h&g ...
- browser-sync 文件监听失败的解决方案
问题 为了方便实时预览前端开发过程中修改源码后的页面,我在全球最大的同性交友网Github中找到了一个非常实用的工具,browser-sync. 安装使用方式请自行到官网https://browser ...
- 记一次使用 removeEventListener 移除事件监听失败的经历
测试一 测试代码如下 var Test = function() { this.element = document.body; this.handler = function() { console ...
- Android来电监听
本文实现来电自动接听,自动录音,自动回拨功能. public class MainActivity extends Activity { @Override protected void onCrea ...
- 第八章 watch监听 83 名称案例-使用watch监听文本框数据的变化
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 启动独立的tomcat服务器,没有自动创建ServletContext,对Context生命周期的监听失败
1.可能web.xml文件里对ContextListener没有进行配置 2.web.xml文件有关对ContextListener的配置,出现了错误的单词拼写问题 比如 <listener&g ...
随机推荐
- x01.os.10: 输入输出
从 x01.Lab.Download 中下载源代码,进入工程目录,make 后再 bochs,即可见到如下界面: 随便打几个字,ok!按 F2,可切换到第二个终端,界面如下: 当然,按 F3 还可切换 ...
- C# FTP 命令无法获取ServerU目录列表问题
第一步: 使用C# 的Ftp功能时,发现了一个很奇怪的现象,获取目录列表的命令,在SeverU上面直接返回错误,而在windows自带的FTP上则正常,经过反复试验,终于发现,原来是ServerU默 ...
- Windows Azure虚拟机和云服务实例计费方式更新
在之前的Windows Azure计费账单中,A0,A1,A2,A3,A4系列的虚拟机(云服务实例)都是以A1为基准计费单位的,即: 虚拟机大小 计费单位(小时) A0 A1*0.25 A1 A1*1 ...
- JAVA IO 以及 NIO 理解
由于Netty,了解了一些异步IO的知识,JAVA里面NIO就是原来的IO的一个补充,本文主要记录下在JAVA中IO的底层实现原理,以及对Zerocopy技术介绍. IO,其实意味着:数据不停地搬入搬 ...
- UVALive 4997 ABCD Tiles --DFS
题意: NxN的地图,上面有A颜色的瓷砖以及一些空格点,要用B,C,D颜色去填充这些空格,只能十字形的填充,还要保证共角或共边的格子不能是相同颜色,求一种字典序最小的填充方法,如果不能,输出" ...
- NOIP2015pj求和
题目描述 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子上都染了一种颜色color_i用[1,m]当中的一个整数表示),并且写了一个数字number_i. 定义一种特殊的三元组:(x ...
- java的构造方法
当一个类a继承一个类b,类b继承类c,类c继承类d时, 先执行d的构造,然后c.b:当该执行a的构造时,如果有成员变量,就先执行成员变量,最后构造 子类继承父类,子类重写父类的某个方法,当父类构造时, ...
- Java面向对象编程 第二章 第一个Java应用
2.1创建Java源文件 Java应用由一个或多个扩展名为".java"的文件构成,这些文件被称为Java源文件,从编译的角度,则被称为编译单元. 本章包含两个Java源文件:Do ...
- 向数据库中插入一个DateTime类型的数据到一个Date类型的字段中,需要转换类型。TO_DATE('{0}','YYYY-MM-DD'))
需要指出的是,C#中有datetime类型,但是这个类型是包括小时,分钟,秒的.这个格式与数据库中的Date类型不符,如果将now设为datetime类型插入数据会失败. 需要通过TO_DATE('字 ...
- PAT 1009. 说反话 (20) JAVA
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区 ...