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. 写一个兼容性比较好的拖拽DEMO

    写一个兼容性比较好的拖拽DEMO 查看Demo 思路 div盒子 鼠标按下事件onmousedown 鼠标移动事件onmousemove,获得鼠标的坐标,将div移动至鼠标的当前坐标 鼠标抬起事件om ...

  2. Qt 技巧:去除对话框边框 + 设置窗口可移动和透明

    1.去除对话框标题栏和边框 在构造函数里设置:    this->setWindowFlags(Qt::FramelessWindowHint); Qt::Dialog     (按照对话框的形 ...

  3. QT直接支持GB18030,附它对此编码的一堆相关文档描述

    http://doc.qt.io/qt-5/qtextcodec.html http://doc.qt.io/qt-5/codec-gbk.html

  4. 转:STL使用入门( Using STL)

    1 介绍 我最开始结束C++编程是从DOS下的Borland C++开始的.那时他们在最新版本3.1中就包含了一套模板库用来做collection.那真是个好东东.当我开始使用Visual C++ 2 ...

  5. 基于visual Studio2013解决C语言竞赛题之0406数列求和

      题目 解决代码及点评 这个题目,还是考察for循环的使用 以及数列规律,该数列的特点是第n个分子 = 第n-1个分子 + 第n-2个分子,分母也是此规律 而另外一个规律是第n个分子和第n- ...

  6. 深入浅出 JSTL

    JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的.这个算是一个java程序员的一个基本功吧. JSP Standard Tag Library (JSTL) 的规范完成于2002年7月, ...

  7. android Graphics(四):canvas变换与操作

    前言:前几篇讲解了有关canvas绘图的一些操作,今天更深入一些,讲讲对画布的操作,这篇文章不像前几篇那么容易理解,如果以前没有接触过画布的童鞋可能比较难以理解,为什么会这样.我尽量多画图,让大家更清 ...

  8. iOS 之 UINavigationController 记录

    有一阵子没有写随笔,感觉有点儿手生.一个多月以后终于又一次坐下来静下心写随笔,记录自己的学习笔记,也希望能够帮到大家. 废话少说回到正题,UINavigationController是IOS编程中比较 ...

  9. POJ 1562(L - 暴力求解、DFS)

    油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...

  10. Tomcat日志catalina.out文件过大的处理方法

    原文地址:http://lcbk.net/tomcat/1396.html 我们知道一般企业使用Tomcat 作为Web端时,它产生的日志会越来越大,特别是catalina.out这个日志文件,然而有 ...