1、继承Service类

2、在清单文件进行配置(因为Service属于四大组件之一)

 <service android:name=".PhoneStatusService">
</service>

3、因为要监听电话状态,并且把文件存在外存中,所以权限配置为

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

4、开启一个服务的代码(像activity、broadcastReceive都使用intent进行开启)

 //开启服务
Intent intent = new Intent(this, PhoneStatusService.class);
startService(intent);

5、通过媒体监听电话情况的Service的代码

 package com.example.callstatuslistener;

 import java.io.IOException;

 import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
/**
* @desc 服务一旦被开启,则会长期运行在后台,除非手工停止掉
* @author zyh
*
*/
public class PhoneStatusService extends Service {
//服务被创建了
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("服务开启");
//电话管理器,它能够获取电话的各种信息
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
//监听手机的通话状态的变化
tm.listen(new MyPhoneListener(), PhoneStateListener.LISTEN_CALL_STATE);
} private class MyPhoneListener extends PhoneStateListener{ private MediaRecorder recorder;
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// TODO Auto-generated method stub
super.onCallStateChanged(state, incomingNumber);
try {
switch(state){
case TelephonyManager.CALL_STATE_IDLE: //空闲状态,也没有响铃
if(recorder != null){ //释放资源
recorder.stop();
recorder.reset(); // You can reuse the object by going back to setAudioSource() step
recorder.release(); // Now the object cannot be reused
}
break;
case TelephonyManager.CALL_STATE_RINGING: //响铃状态
System.out.println("发现来电号码为:" + incomingNumber);
recorder = new MediaRecorder();
//设置录制的音频源,从话筒中获取声音,只能录制自己的
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//设置它的文件格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置的音频的编码格式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//文件保存的位置
recorder.setOutputFile("/sdcard/" + System.currentTimeMillis() + ".3gp");
recorder.prepare(); break;
case TelephonyManager.CALL_STATE_OFFHOOK: //通话状态
if(recorder != null){
recorder.start();
}
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} } //服务销毁了
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("服务销毁");
} @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} }

)

service入门—电话监听器的更多相关文章

  1. Android service 服务的应用之电话监听器以及短信监听器

    首先建立一个项目工程文件,如下图所示:

  2. (转)Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  3. Web Service入门简介(一个简单的WebService示例)

    Web Service入门简介 一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从I ...

  4. Java电话监听器【精品博客】

    模拟拨打电话,接听电话,挂断电话,拨打为空号,等等,这些动作用Java接口监听的方式来完成,主要是为了训练使用接口监听回调: /** * 业务场景一: * [萍萍]--->请输入手机号码进行拨打 ...

  5. Android入门——电话拨号器和四种点击事件

    相对于HelloWorld来说,电话拨号器也是Android的一个入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 ...

  6. Android入门——电话拨号器和4种点击事件

    关于HelloWorld为,电话拨号程序还AndroidA入门demo,从这个样例我们要理清楚做安卓项目的思路. 大体分为三步: 1.理解需求,理清思路 2.设计UI 3.代码实现 电话拨号器 1.  ...

  7. Web Service入门

    [IT168 技术文档] 一.什么是Web Service?     Web Service是构建互联网分布式系统的基本部件.Web Services 正成为企业应用集成(Enterprise App ...

  8. Angular Service入门

    1.Angular内置service Angular为了方便开发者开发,本身提供了非常多的内置服务.可以通过https://docs.angularjs.org/api/ng/service查看Ang ...

  9. Web Service 入门例子

    在网上很常见的一个列子,实现计算器,看完总得自己练练,不然一段时间不接触又忘了 新建一个空网页,因为.net framework 4.0 不能直接建web 服务,只能在项目中添加 然后在项目中添加We ...

随机推荐

  1. http://riddle.arthurluk.net walkthrough

    MSVFMyU4MCU4MWh0dHAlM0ElMkYlMkZyaWRkbGUuYXJ0aHVybHVrLm5ldCUyRnN0YWdlb25lLnBocCUwRCUwQTIlRTMlODAlODFo ...

  2. 修改MojoWeixin 只保留用户name 取消群昵称

    <pre name="code" class="python"> if($msg->type eq "friend_message& ...

  3. PHP中magic_quotes_gpc和 magic_quotes_runtime区别及其反斜线转义问题

    php中关于反斜线转义: php中数据的魔法引用函数 magic_quotes_gpc  或 magic_quotes_runtime      设置为on时,当数据遇到 单引号' 和 双引号&quo ...

  4. opencv是什么

    OpenCV是一个用于图像处理.分析.机器视觉方面的开源函数库.       不管你是做科学研究,还是商业应用,opencv都能够作为你理想的工具库,由于,对于这两者,它全然是免费的.该库採用C及C+ ...

  5. uva 10891 Game of Sum(区间dp)

    题目连接:10891 - Game of Sum 题目大意:有n个数字排成一条直线,然后有两个小伙伴来玩游戏, 每个小伙伴每次可以从两端(左或右)中的任意一端取走一个或若干个数(获得价值为取走数之和) ...

  6. 域用户允许更改IP地址

    1.在DC上设置不好使. 2.需在本地用户组里添加到network.......组里. 注意:有的时候,连接不到DC上,是由于DNS的事,需要先去掉不必要的dns地址. 添加完后,需要重启或注销. 另 ...

  7. ios常见加密解密方法

    在其他平台中经常会计算MD5值,在iOS平台中也提供了该方法,首先需要导入头文件 #import <CommonCrypto/CommonDigest.h> 方法CC_MD5可以获取MD5 ...

  8. ActionBar开启Overlay Mode(覆盖模式)

    以下内容参考自Android官网http://developer.android.com/training/basics/actionbar/overlaying.html#EnableOverlay ...

  9. [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)

    题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000   Description ...

  10. [Swust OJ 1132]-Coin-collecting by robot

          题目链接:          http://acm.swust.edu.cn/problem/1132/ Time limit(ms): 1000 Memory limit(kb): 65 ...