步骤:

  1. 创建CallStateService继承Service
  2. 取得电话服务
  3. 监听电话动作
    1. 电话监听的对象

      1. 没有电话时

        1. 停止刻录
        2. 重设
        3. 刻录完成一定要释放资源
      2. 电话响铃时
        1. 从麦克风采集声音
        2. 内容输出格式
        3. 音频编码方式
        4. 获取sd卡目录并存入
      3. 电话接通时
        1. 开始录制
    2. 电话监听的行为
  4. 启动service
  5. 注册service并添加监听电话状态的权限
    1. 监听电话状态权限
    2. sd卡读写权限
    3. 音频录制权限

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.callstatelistener"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="14"android:targetSdkVersion="19" /><!-- 监听电话状态 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!-- 音频录制的权限 --><uses-permission android:name="android.permission.RECORD_AUDIO"/><!-- 向SD卡读写的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.callstatelistener.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><!-- 注册service --><service android:name="com.example.callstatelistener.CallStateService"></service></application></manifest>

CallStateService.java

package com.example.callstatelistener;import java.io.File;
import java.io.IOException;import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.util.Log;/*** 监听电话状态service* * @author zhaoyazhi* *         2014-6-17*/
public class CallStateService extends Service {public static final String TAG = "aaa";@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic void onCreate() {super.onCreate();// 取得电话服务TelephonyManager telManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);// 电话监听的对象,电话监听的行为telManager.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);}class MyPhoneStateListener extends PhoneStateListener {private MediaRecorder recorder;/*** int state电话状态。 String incomingNumber电话号码*/@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state) {case TelephonyManager.CALL_STATE_IDLE: /* 无任何状态时 */if (recorder != null) {recorder.stop();// 停止刻录recorder.reset(); // 重设recorder.release(); // 刻录完成一定要释放资源}Log.i(TAG, "------------------没有电话来");break;case TelephonyManager.CALL_STATE_RINGING: /* 电话进来时 */Log.i(TAG, "------------------来电话了---并且响铃");recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);// 从麦克风采集声音recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 内容输出格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 音频编码方式// 获取sd卡目录File dir = Environment.getExternalStorageDirectory();recorder.setOutputFile(dir.getPath()+ "/csdn.amr");try {recorder.prepare(); // 预期准备} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}break;case TelephonyManager.CALL_STATE_OFFHOOK: /* 接起电话时 */Log.i(TAG, "------------------通话中");if (recorder != null) {recorder.start(); // 开始刻录}break;default:break;}};}
}

MainActivity.java

  1. package com.example.callstatelistener;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. public class MainActivity extends Activity {
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. //intent 意图
  11. Intent service = new Intent(MainActivity.this, CallStateService.class);
  12. //启动service服务
  13. this.startService(service);
  14. }
  15. }

查看sd卡文件

赵雅智_service电话监听2加接通电话录音相关推荐

  1. 赵雅智:android教学大纲

    带下划线为详细内容链接地址.点击后可跳转.希望给大家尽一些微薄之力.眼下还在整理中 教学章节 教学内容 学时安排 备注 1 Android高速入门 2 Android模拟器与常见命令 3 Androi ...

  2. 通过PhoneStateListener实现Android电话监听

    电话监听是比较简单的安卓案例.但却非常经典,因为它涵盖了动态监听.服务绑定.文件保存三大技术操作.作为Android学习的不错案例,今天我就和大家一起来看看安卓通过PhoneStateListener ...

  3. AndroidStudio系统广播Broadcast电话监听

    电话监听录音APP 主要功能 (1)设置要监听的号码:要求使用隐式Intent跳转到手机联系人并选定号码 (2)利用系统广播机制监听该去电电话 (3)启动服务完成录音功能,当结束通话时结束录音(手工结 ...

  4. android音乐播放器监听器,android 音乐播放器电话监听

    正好用到整理下 首先 添加 权限 电话监听 /** * * @author xiaoma * 电话监听器类 */ private class MobliePhoneStateListener exte ...

  5. 延迟加载图片并监听图片加载完成

    要求: 图片延迟加载.未加载完显示加载中.监听图片加载完后,加载中消失. demo: <!DOCTYPE html> <html lang="en"> &l ...

  6. js - 预加载+监听图片资源加载制作进度条

    这两天遇到一个新需求:一个一镜到底的h5动画.因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕.即处理预加载. 总结下来,下次这种需求需要提前注意以下几点: 一.图片而不是背景图 本 ...

  7. vue组件加载完成之后执行方法_vue-cli监听组件加载完成的方法

    在使用vue-cli开发项目时遇到过一个问题,要求是页面组件全部加载完成后再执行某个函数,给上代码参考,方法可能有点笨,好在实现了功能. 1.安装vuex npm install vuex --sav ...

  8. android 电话监听和拦截

    一.首先在manifest.xml文件中获取监听电话权限,注册监听电话的Activity 1.添加访问手机电话状态的权限 <uses-permission android:name=" ...

  9. android 之电话监听

    在android中,要监听来电与去电是比较简单的,至少有如下两种方法. 1. Receiver 定义一个Receiver派生类,并指定action:android.intent.action.PHON ...

最新文章

  1. 皮一皮:大哥!二弟!三弟!
  2. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例
  3. 配置事务springmvc3.1 mybatis 3.1 事务不起作用
  4. 【机器学习】机器学习项目流程
  5. 开源游戏服务器端框架Firefly正式将GFirefly整合
  6. C/C++学习之路: 智能指针
  7. php 系统平均负载,Linux_解析Linux系统的平均负载概念,一、什么是系统平均负载(Load a - phpStudy...
  8. python深入和扩展_加速方案 — Python扩展模块
  9. 用友uclient客户端下载手机_影院6080手机版-影院6080手机客户端下载
  10. Leetcode每日一题:129.sum-root-to-leaf-numbers(求根到叶子节点数字之和)
  11. 移动端html右滑空白,BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法...
  12. 【渝粤题库】陕西师范大学400001 思想政治教育原理 作业(专升本)
  13. code blocks代码性能分析_介绍几款Python性能优化工具
  14. DIY制作修改替换PPC手机短信背景图片的技巧
  15. C4D插件X-Particles粒子特效(六)
  16. 10年老程序员:到底是学前端好还是后端好?
  17. android高仿ios控制中心,控制中心IOS 13-安卓仿苹果ios控制中心插件
  18. 爬虫实战之爬取电影天堂全部电影信息
  19. 3d打印技术改变生活的影响
  20. 如何把microsoft store里面的软件添加到桌面

热门文章

  1. uboot启动内核的相关命令详解——boot、bootm
  2. Stlink无法检测到芯片
  3. Matlab运用kron()函数计算Kronecker乘法
  4. 灵图:不能上市就“冬眠”
  5. 对数线性模型 matlab,非线性规划含有对数函数用什么matlab调用函数的程序
  6. HTML5 DIV+CSS综合运用
  7. 输出给定集合的所有真子集的三种方法之比较
  8. Two thousand twenty one -- March -- twenty one -- Sunday
  9. 工业智能网关BL110应用之六: 支持PLC,Modbus,BACnet,电表等协议列表
  10. TT浏览器 v4.7 简体中文版