监听手机录音

监听手机录音

需求分析:

        记录通话过程中的录音,并保存到指定路径~

      
知识点: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监听的是手机状态的变化,下面该监听器其它的监听对象<span>监听手机录音</span>
手机状态改变的state三种值:空暇、通话、挂断

依据三种状态,处理Mediaplayer,代码


<span>监听手机录音</span>

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://javaforall.net/119199.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue3.0中关闭eslint(全部不检测)[通俗易懂]

    vue3.0中关闭eslint(全部不检测)[通俗易懂]前言:在项目中eslint检查是一个很棒的工具,但是在非正式场合,或者某些情况下,他会给我们带来很多不方便,这里分享下如何在新建项目后把他的eslint检查先关掉(正式项目不推荐关闭,因为良好的习惯是从每一行代码的规范开始)方法:打开我们的.eslintrc.js文件,把’@vue/standard’注释,然后把服务重启,重启,重启,重要的事情说三遍.eslintrc.jsmodule.exports={root:true,…

    2022年6月7日
    101
  • html设置背景音乐循环播放_html背景音乐循环播放

    html设置背景音乐循环播放_html背景音乐循环播放本文实例讲述了js控制网页背景音乐播放与停止的方法。分享给大家供大家参考。具体实现方法如下:js控制背景音乐bgsound的方法(开始与停止)varbg_sound=document.createElement_x(“bgsound”);//创建背景音乐bg_sound.id=”i_bg”//设置id属性document.body.appendChild(bg_sound);//body中添加背…

    2022年9月24日
    2
  • Mybatis事务隔离级别「建议收藏」

    Mybatis事务隔离级别「建议收藏」转载:https://blog.csdn.net/qq924862077/article/details/52599961一般数据库的隔离级别有4个,由低到高依次为Readuncommitted、Readcommitted、Repeatableread、Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。√:可能出现    ×:不会出现脏读不可重复读幻读说明…

    2022年10月14日
    3
  • arduino 超声波测距误差较大_超声波测距的背景

    arduino 超声波测距误差较大_超声波测距的背景arduino实现超声波测距涉及模块:四线超声波测距模块,LCD1602ALCD1602连接实验代码:#include<LiquidCrystal.h>LiquidCrystallcd(12,11,5,4,3,2);constintTrigPin=7;constintEchoPin=6;floatcm;voidsetup(){lcd.begin(16,2);pinMode(TrigPin,OUTPUT);pinMode

    2025年11月24日
    1
  • 02_Hadoop集群环境的建立

    02_Hadoop集群环境的建立

    2021年8月22日
    57
  • redux-saga学习

    redux-saga学习如果redux需要用到sideeffect异步操作,redux-thunk和redux-saga绝对是目前两个最受欢迎的中间件插件。redux-saga是一个用于管理redux应用异步操作的中间件,redux-saga通过创建sagas将所有异步操作逻辑收集在一个地方集中处理,可以用来代替redux-thunk中间件。

    2026年1月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号