步骤:

  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-sdk
android: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"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android: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"; @Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
} @Override
public 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电话号码
*/
@Override
public 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 block
e.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卡文件

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhb3lhemhpMjEyOQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

赵雅智_service电话监听2加接通电话录音的更多相关文章

  1. 赵雅智_service生命周期

    Android中的服务和windows中的服务是类似的东西,服务一般没实用户操作界面.它执行于系统中不easy被用户发觉,能够使用它开发如监控之类的程序. 服务的开发步骤 第一步:继承Service类 ...

  2. 赵雅智:android教学大纲

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

  3. android的电话监听

    android的电话监听 新建一个项目,结构图如下: PhoneService: package com.demo.tingdianhua; import android.app.Service; i ...

  4. jQuery学习(监听DOM加载)

    jQuery的extend方法 function njQuery() { } /* njQuery.extend = function (obj) { // 此时此刻的this就是njQuery这个类 ...

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

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

  6. C# NanUI WinFormium监听页面加载开始\结束

    个人博客 地址:https://www.wenhaofan.com/article/20190501213608 因为NanUI文档中仅介绍了Formium窗口的监听,但是没有WinFormium相关 ...

  7. 赵雅智_BroadcastReceiver

    BroadcastReceiver  用于接收程序(包含用户开放的程序和系统内建程序)所发出的Broadcast intent 耗电量 开机启动 窃取别人短信 窃取别人电话 开发: 创建须要启动的Br ...

  8. 学习Android过程中遇到的问题及解决方法——电话监听

    也许有时你会有这样一个需求:通电话时有一个重要的事需要记下来或者和一个陌生人特别是大骗子通话时,这是就想如果能把通话录下来就方便多了.(这才是我写这个代码的目的!!!) 在此过程中,犯了一个很大的错误 ...

  9. android 电话监听和拦截

    一.首先在manifest.xml文件中获取监听电话权限,注册监听电话的Activity <receiver android:name=".PhoneReceiver"> ...

随机推荐

  1. 最小二乘法,python3实现

    https://www.cnblogs.com/BlogOfMr-Leo/p/8627311.html                      [用的是库函数] https://blog.csdn. ...

  2. scrapy--介绍

    ​ Scrapy一个开源和协作的框架,其最初是为了页面抓取所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可用于如数据挖掘.监测和自动化测试等领 ...

  3. ajax的post请求与编码

    window.onload = function(){ document.getElementById('username').onblur = function(){ var name = docu ...

  4. 《TCP/IP具体解释卷2:实现》笔记--协议控制块

    协议层使用协议控制块(PCB)存放各UDP和TCP插口所要求的多个信息片.Internet协议维护Internet协议控制块 (internet protocol control block)和TCP ...

  5. 四种布局JS

    现代 Web 开发在将体验和功能做到极致的同时,对于美观的追求也越来越高.在推荐完图形库之后,再来推荐一些精品的独立 UI 组件.这些组件可组合在一起,形成美观而交互强大的 Web UI . 给 We ...

  6. 1.3 Python基础知识 - 用户交互及传递参数

    一.用户交互 用户交互方面,每种开发语言都有不同的方式,例如shell语言用的是,“read -p "What is  your name ? " ”.python中是什么样子的呢 ...

  7. 利用朴素贝叶斯(Navie Bayes)进行垃圾邮件分类

    贝叶斯公式描写叙述的是一组条件概率之间相互转化的关系. 在机器学习中.贝叶斯公式能够应用在分类问题上. 这篇文章是基于自己的学习所整理.并利用一个垃圾邮件分类的样例来加深对于理论的理解. 这里我们来解 ...

  8. thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么

    thinkphp3.1课程 1-2 thinkphp中入口文件的实质是什么 一.总结 一句话总结:在thinkphp中,我们访问的始终是入口文件,并没有主动去访问任何一个其他文件,只不过在入口文件体内 ...

  9. [Maven实战](6)仓库(本地仓库,远程仓库,镜像)

    1. 简单介绍 maven能够在某个位置统一存储全部maven项目共享的构件,这个统一的位置就是仓库.实际的Maven项目将不会各自存储其依赖文件,它们仅仅须要声明这些依赖的坐标,在须要的时候(比如. ...

  10. Java性能优化技巧集锦

    一.通用篇 "通用篇"讨论的问题适合于大多数Java应用. 1.1 不用new关键词创建类的实例 用new关键词创建类的实例时,构造函数链中的全部构造函数都会被自己主动调用.但假设 ...