Android(安卓)手机录音功能实现
16lz
2021-12-04
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>
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- android位置服务GPS经纬度获取
- android之手机震动Vibrate
- android判断用户网络类型
- Android获取、设置音频的音量大小
- android捕获全局异常,CrashHandler
- Android实现复制粘贴功能
- Android动态添加Fragment
- Android(安卓)从网上获取图片