package org.homeway.phonerecorder; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.media.MediaRecorder; import android.os.Environment; import android.telephony.TelephonyManager; import android.util.Log; import java.io.File; import java.io.IOException; /** * Created by Administrator on 15-2-27. */ public class PhoneBroadcastReceiver extends BroadcastReceiver { // 本机拨出的电话号码 private static String outgoingNumber; // 来电的电话号码 private static String incomingNumber; // 系统录音机 private static MediaRecorder mediaRecorder; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.d("PhoneBroadcastReceiver", "intent.getAction() = " + action); // 如果是去电, 获取拨出的电话号码 if (action.equals(Intent.ACTION_NEW_OUTGOING_CALL)) { outgoingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); Log.d("PhoneBroadcastReceiver", "outgoingNumber = " + outgoingNumber); } else if (action.equals("android.intent.action.PHONE_STATE")) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE); int phoneState = tm.getCallState(); Log.d("PhoneBroadcastReceiver", "phoneState = " + phoneState); switch (phoneState) { case TelephonyManager.CALL_STATE_RINGING: incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.d("PhoneBroadcastReceiver", "incomingNumber = " + incomingNumber); break; case TelephonyManager.CALL_STATE_OFFHOOK: new Thread(){ @Override public void run() { File dirFile = Environment.getExternalStorageDirectory(); File file; if (null != incomingNumber && incomingNumber.length() > 0) { file = new File(dirFile, "IN_" + incomingNumber + "_" + System.currentTimeMillis() + ".amr"); } else { file = new File(dirFile, "OUT_" + outgoingNumber + "_" + System.currentTimeMillis() + ".amr"); } mediaRecorder = new MediaRecorder(); // mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); /** * !!! 红米note必须设置为VOICE_CALL才能收到声音.设置为其他类型时, 录音文件在播放时无声音. * !!! coolpad手机在设置为VOICE_CALL时, 执行mediaRecorder.start()时抛出异常. 若设置为DEFAULT或MIC时则程序正确执行. */ // mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setOutputFile(file.getAbsolutePath()); try { mediaRecorder.prepare(); mediaRecorder.start(); Log.d("PhoneBroadcastReceiver", "record file path = " + file.getAbsolutePath()); } catch (IOException e) { e.printStackTrace(); Log.e("PhoneBroadcastReceiver", e.getMessage()); mediaRecorder = null; } catch (Exception e) { e.printStackTrace(); Log.e("PhoneBroadcastReceiver", e.getMessage()); mediaRecorder = null; } } }.start(); break; case TelephonyManager.CALL_STATE_IDLE: if (null != mediaRecorder) { mediaRecorder.stop(); mediaRecorder.reset(); mediaRecorder.release(); mediaRecorder = null; incomingNumber = null; outgoingNumber = null; } Log.d("PhoneBroadcastReceiver", "finished!"); break; } } } }
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.homeway.phonerecorder" > <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".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> <receiver android:name=".PhoneBroadcastReceiver"> <intent-filter> <!-- 获取来电广播 --> <action android:name="android.intent.action.PHONE_STATE"/> <!-- 获取去电广播 --> <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver> </application> </manifest>
相关推荐
Android调用手机系统自带录音功能实现语音录制与播放
仿照微信,实现Android下的录音功能
可实现Android版录音功能,并播放录音资源,资源为全部完整代码
支持大部分已实现getUserMedia的浏览器,包括腾讯Android X5内核(QQ、微信)。 录音默认输出mp3格式,另外可选wav格式(此格式录音文件超大);有限支持ogg(beta)、webm(beta)格式;支持任意格式扩展(前提有相应...
这次课题的目的是在Android系统的手机开发平台之上,研究与开发一个录音软件,提供适用手机的录音功能服务。 首先,录音的基本功能就是录音,手机用户首先用到的就是录制音频,输入信息以音频的形式展现出来,存储...
该demo使用h5+的功能基于android手机实现了录音,拍照,录像并进行上传下载,播放的功能,采用h5开发移动app,理论是支持android和ios的开发,开发工具采用hbuilder,利用hbuilder打包app在android机上运行,目前只...
Android手机中实现录音和播放录音功能的源码
android 录音机源码,实现了简单的录音机功能,适合初学者学习参考
早就有人通过PC声卡的输入(麦克风孔)来做模拟示波器,但是用手机来实现的比较少。用J2ME的MMAPI实现模拟示波器
基于Android平台录音机软件的设计与实现,吴想想,宋茂强,随着时代的发展,人们对于信息的获取有着强烈的需求。智能手机作为一种非常重要的通讯工具,功能越来越强大,智能手机凭借其可以
本文实例讲述了Android6.0编程实现双向通话自动录音功能的方法。分享给大家供大家参考,具体如下: 项目中需要实现基于Android 6.0 的双向通话自动录音功能,在查阅相关android电话状态监听文章以及Git上的开源录音...
Android MediaRecorder实现暂停断点录音功能Media2。程序测试通过并且附有编译通过的APK文件直接在手机上运行
Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。 MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个...
然后在介绍了如何在计算机上搭建Android的开发平台,是一套基于Android平台的手机录音与播放软件的设计方案,这个软件分为录音界面和播放器验证界面。在软件系统上使用AVD虚拟机成功的编码和测试了Android录音播放...
Android手机来电防火墙,实现的功能: 1.基于黑白名单的电话和短信过滤功能 2.基于关键字的短信过滤功能 3.基于GPS的手机防盗功能 4.电话录音和留言功能 5.隐私空间
该录音APP有如下功能:①录音 ②录音过程中可暂停/继续录音 ③播放录音文件 ④在手机应用间分享录音文件
使用MediaRecorder录音并进行分贝判断,当超过一定分贝时启动邮件发送(JavaMail for Android)和语音通话(WebRTC)功能
本文实例讲述了Android编程实现录音及保存播放功能的方法。分享给大家供大家参考,具体如下: 在android中进行录音相对来说是比较简单的,使用系统提供的MediaRecorder类进行录音并保存,然后调用MediaPlayer进行...
android电话、短信黑白名单拦截、电话录音等综合实现实例,目前智能手机都具备类似功能,还是很有必要学习研究下的。运用广播开启监听这个服务,注册电话拦截广播等。 来电:CallLog.Calls.INCOMING_TYPE (常量值...
基于QT设计的录音机: 支持选择指定声卡录音选择指定扬声器放音 QT通过QAudioInput类读取声卡PCM数据,在封装WAV头,转为WAV格式的文件保存到本地。代码里固定录制10S的声音,有进度条显示录制和播放的进度。