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. 在myeclipse中修改svn帐户

    把C:\Users\Administrator\AppData\Roaming\Subversion\auth\这个文件中所有文件删除 然后在myeclipse中同步会让你输入用户名和密码

  2. UnixShell编程(第三版)

    这本书相当老了,04年的,现在  在linux上做实验. 1,date 显示日期. 2,who  显示用户,who am i 3,echo 后面字符串会全部输出,,会过滤掉多余空格,单双引号,分号等. ...

  3. shell学习之字符串处理

    1.获取字符串长度 value=abcd;echo ${#value} 输出:42.获取子串 value=abcd;:} 输出:d value:a:b,其中a表示起始位置,b表示获取的子串的长度. 3 ...

  4. 文字适应DIV

    今天突然碰到了一个奇怪的问题  那就是对于纯数字和英文字母  文字多了会超出div  且即使是设置了height:auto overflow-y:auto 也不管用 只是在x轴上出现滚动条   不论用 ...

  5. 关于 IE firefox Chrome下的通过用js 关闭窗口的一些问题

    首先IE是可以通过window.close()来关闭浏览器窗口的,但是在firefox和Chrome下是无效的,原因在于: ~~~ie可直接<button onclick="windo ...

  6. php返回的json格式

    public function search_ip(){ $where['ip'] = $_GET['ip']; $Machine = M('Machine_info'); $arr = $Machi ...

  7. php 用户访问菜单页面,必须登录,判断用户是否登录

    <pre name="code" class="python"># 本节课大纲: 一.空模块和空操作 1.空操作 function _empty($ ...

  8. 省部级干部list

    省部级干部表 省(市.自治区) 省(市)委书记 省(市)人大主任 省(市)长 省(市)政协主席 北京市 郭金龙 杜德印 王安顺 吉林 天津市 黄兴国 肖怀远 黄兴国 臧献甫 上海市 韩正 殷一璀(女) ...

  9. boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

    一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待. //makefile #-------------------------------------------------- ...

  10. MFC内部结构剖析

    //////////////////////////////////////////////////////////////////////////////////////////MFC程序的执行顺序 ...