监听手机录音

监听手机录音

需求分析:

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

      
知识点: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>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119199.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 网卡的流量控制flow control

    网卡的流量控制flow controlopenstack运维中发现有一个计算节点的存储网卡不停的down,摘取部分系统日志如下:Aug2906:25:59compute8kernel:ixgbe0000:86:00.0enp134s0f0:NICLinkisDownAug2906:26:00compute8kernel:ixgbe0000:86:00.0enp134s0f0:NICLink…

  • PyCharm激活码永久有效PyCharm2019.1.4激活码教程-持续更新,一步到位

    PyCharm激活码永久有效PyCharm2019.1.4激活码教程-持续更新,一步到位PyCharm激活码永久有效2019.1.4激活码教程-Windows版永久激活-持续更新,Idea激活码2019.1.4成功激活

  • ListView 排序问题[通俗易懂]

    ListView 排序问题[通俗易懂] 在DataGrid 中有自带的排序,但是在ListeView中却没有这一项,下面就给出我平时用的ListView的排序使用方法,给志同道合的朋友们参考参考:在ColumnClick事件下添加:其中要注意:intsortColumn=-1;其中sortColumn用来记录上次排序的列的索引privatevoidlistView1_ColumnClick(objectse

  • 文本分类–多分类

    文本分类–多分类

  • 小明加密通道进入_德州人行通道闸哪个牌子好

    小明加密通道进入_德州人行通道闸哪个牌子好全高转闸有了高速发展的引擎,安保成为每个,地区重要的投入,很多重要的场所需要做到无人值守全天侯的安保措施,像、从事特殊行业作业的工厂、工地等场所就成了全高转闸十足的推动者,行业的迅速发展促生了一批又一批高速发展的企业,其中深圳市志美智能科技有限公司就是其中一家行业的全高转闸供应商。同时人脸识别技术,虹膜技术,掌纹识别技术,指纹识别技术,无线射频识别技术,条码识别技术等一些新技术的应用面的不断…

  • Pygame安装的详细说明

    Pygame安装的详细说明Pygame的安装在未安装好pygame模块时,我们在使用pygame开发游戏就回发生Error:ModuleNotFoundError:Nomodulenamed‘pygame’此时则要安装好pygame模块才可以正常使用pygame模块进行游戏开发。下面详细讲述pygame模块的安装:1.先检查自己的python版本,我们现在用的一般是最新版,例如我下载的是python3….

发表回复

您的电子邮箱地址不会被公开。

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