Android Service 电话录音机
来源:互联网 发布:linux web性能测试 编辑:程序博客网 时间:2024/04/28 06:37
项目简介:
该项目接听电话的时候实现自动录音
详细介绍:
项目安装后,启动该服务,开机的时候该服务也会自动启动。当用户接听电话的时候,该服务会自动调用录音机,将用户语音全部录下来,放在SD卡中保存起来
该应用涉及到的知识有:
- 1.Android的四大组件之一:Service的使用
Service可以看做是一个没有前台界面的Activity - 2.如何调用手机中的录音服务
在手机响铃状态初始化录音机
在摘机状态开启录音机
在空闲状态释放录音机资源 - 3.如何在手机开机的时候就启动服务
通过开机时广播接收者接受开机完成的广播后,然后启动服务
注意:
- 1.监听用户电话的状态需要添加权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
- 2.调用录音机需要添加用户权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
- 3.该项目最好在4.0模拟器上运行,在4.3以后的模拟器上运行可能会出问题。因为4.3以后的模拟器上去掉了拨号功能,所以可能录音的文件的大小一直是0,导致录音失败
步骤:
1.创建一个Android项目,在该项目中新建一个服务RecorderService:
public class RecorderService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } // 创建Service对象时调用 @Override public void onCreate() { super.onCreate(); // 拿到电话管理器 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); // 监听电话状态 // 第二个参数events表示需要监听的事件. // STEN_CALL_STATE表示只侦听电话状态的改变 tm.listen(new MyListen(), PhoneStateListener.LISTEN_CALL_STATE); } class MyListen extends PhoneStateListener { private MediaRecorder recorder = null; // PhoneStateListener中有许多方法,可以查看API文档查看各个方法的作用 // 一旦电话状态改变,此方法调用 // state表示当前电话的状态,电话状态分为三种:响铃、空闲、摘机(即接听) @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE: // 空闲状态,释放资源 // Android的资源是自动释放的(因为java机制),但是录音是使用C语言调用硬件,C语言会占用很多资源,所以要手动释放一下 if (recorder != null) { recorder.stop(); Log.i("HHH", "录音机停止"); recorder.release(); Log.i("HHH", "录音机释放"); recorder = null; } break; case TelephonyManager.CALL_STATE_RINGING: // 响铃状态,初始化录音机 // 如果录音机为空,就初始化,不为空就直接使用 if (recorder == null) { recorder = new MediaRecorder(); // 设置声音来源,MIC表示来源是麦克风。也可以选择其他的来源。 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置输出格式 // THREE_GPP:3GP格式,该格式既可以是音频,也可以是视频,Android中默认的都是这个格式,也可以自己设置为其他格式 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 设置文件的名字 recorder.setOutputFile(Environment.getExternalStorageDirectory().getPath() + "/recorder.3GP"); // 设置音频编码 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 初始化完毕 try { recorder.prepare(); } catch (Exception e) { e.printStackTrace(); } Log.i("HHH", "初试化录音机完毕"); } break; case TelephonyManager.CALL_STATE_OFFHOOK: // 摘机状态,开启recorder if (recorder != null) { recorder.start(); Log.i("HHH", "录音机开启"); } break; } } }}
2.由于要求开启启动,所以穿点一个广播接收者,使得每次开机完成后就启动该项目
public class BootReceiver extends BroadcastReceiver { // 开机启动录音服务 @Override public void onReceive(Context context, Intent intent) { Intent it = new Intent(context, RecorderService.class); // 服务是没有前台界面的,所以尽管是在上下文外跳转到服务,但是不需要创建任务栈 context.startService(it); }}
3.在清单文件中注册服务:
<service android:name=".RecorderService" > </service>
由于在项目中监听了用户的电话状态,调用了系统的麦克风以及系统的录音机,往SD卡中写入的数据,接收了开机广播,所以需要添加用户权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
0 0
- Android Service 电话录音机
- 45.android服务service-电话录音机
- 使用service实现电话录音机
- Service_电话录音机
- Android_07_电话录音机
- 电话录音机实现
- android_54_电话录音机
- 【Android】录音机
- Android:Service:采用Service实现电话窃听器
- android之录音机学习
- android 录音机笔记
- Android 录音机模块分析
- Android:小试录音机
- Android录音机应用
- Android多媒体开发:录音机
- Android简易录音机
- [Android] Android之Service案例-电话窃听
- android服务Service----实现电话监听录音
- 2016年3月 PHP课程项目
- php7.0对于敏感词扩展库的兼容
- 什么是同步?什么是互斥?
- 栈模拟队列,队列模拟栈
- 【SQL】sql 时间维度表相关
- Android Service 电话录音机
- DNS可靠吗
- 《ACM程序设计》书中题目--problem m
- hbase集群搭建.txt
- 分享一个香橙派PC2的C语言点亮LED程序
- Eclipse配置maven
- 线程同步与互斥:互斥锁
- 【概率DP】hdu 5819
- 安装chrome导致ftp无法用windows资源管理器打开