博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
监听手机录音
阅读量:4950 次
发布时间:2019-06-11

本文共 2118 字,大约阅读时间需要 7 分钟。

需求分析:
        记录通话过程中的录音,并保存到指定路径~
      
知识点:1.手机开机发出广播,广播接受者收到通知,开启service服务 
              2.Service工作流程:
                    1.获取手机管理对象·
                    2.注冊监听器,对应手机状态
                    3.依据手机状态(振铃、通话、空暇),创建Mediaplay对象,暂停
 这里监听手机状态,加入权限
   <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
代码:
TelephonyManager manager=(TelephonyManager) getSystemService(TELEPHONY_SERVICE);//获取电话管理
  manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
   
 //用电话管理器注冊一个监听器,监听电话状态
注意:手机状态监听这,能够监听多个状态, LISTEN_CALL_STATE监听的是手机状态的变化,下面该监听器其它的监听对象
手机状态改变的state三种值:空暇、通话、挂断
依据三种状态,处理Mediaplayer,代码
public void onCallStateChanged(int state, String incomingNumber) {
// 电话状态改变时运行该方法
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.d("Debug","振铃");
num = incomingNumber; // 振铃时, 记录号码
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d("Debug","開始录音");
startRecording(); // 摘机时, 開始录音
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d("Debug","空暇状态");
stopRecording(); // 空暇时, 结束录音
break;
}
}
思考:假设手机没有振铃?

停止录音:
private void stopRecording() {
if (mRecorder != null) {
mRecorder.stop(); // 停止
        mRecorder.release();       // 释放资源
        mRecorder = null; // 垃圾回收
}
}
開始录音:
private void startRecording() {
try {
Log.d("Debug", "startRecording");
mRecorder = new MediaRecorder(); // 创建媒体记录器
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频源
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// 设置输出格式
mRecorder.setOutputFile("/mnt/sdcard/" + num + "_" + System.currentTimeMillis() + ".3gp");                             // 设置输出文件路径
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);// 设置编码
mRecorder.prepare(); // 准备
mRecorder.start(); // 開始
} catch (Exception e) {
e.printStackTrace();
} }}}
总结:MediaPlayer操作过程,停止和录音过程~,这里使用到了sdcard所以,必须声明权限。
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>//同意程序进行录音
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> //写入存储卡

清单文件的配置信息:
 <receiver  android:name=".PhoneBroacast">
            <intent-filter >
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>
        <service android:name=".PhoneService">   
        </service>

转载于:https://www.cnblogs.com/mengfanrong/p/3858963.html

你可能感兴趣的文章
Java笔记01——IO流
查看>>
mysql遇见error,1049
查看>>
NYOJ311 完全背包
查看>>
codevs——2822 爱在心中
查看>>
Python基础班---第一部分(基础)---Python基础知识---认识Python
查看>>
JAVA MAC 配置
查看>>
1134 最长上升子序列 (序列型 DP)
查看>>
js冒泡排序
查看>>
第一次作业 4班卢炳武
查看>>
抽象类的调用
查看>>
使用硬盘,安装双系统,Win7+CentOS
查看>>
Javascript学习总结
查看>>
php 用正则替换中文字符一系列问题解决
查看>>
ActiveMQ应用笔记一:基本概念&安装
查看>>
大话数据结构之四(串)
查看>>
加热炉简是新来的整个系统的板
查看>>
Mockito使用注意事项
查看>>
[LeetCode] Palindrome Linked List 回文链表
查看>>
UVA - 825Walking on the Safe Side(dp)
查看>>
android大概是通过logcat拦截Log
查看>>