您好,欢迎访问三七文档
Android实训案例(七)——四大组件之一Service初步了解,实现通话录音功能,抽调接口1.启动服务服务是怎么启动的,我们先定义一个按钮吧Buttonandroid:id=@+id/startserviceandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:layout_centerInParent=trueandroid:text=启动服务/我们还得新建一个类——MyServicepackagecom.lgl.servicedemo;importandroid.app.Service;importandroid.content.Intent;importandroid.os.IBinder;importandroid.util.Log;/***我的服务*Createdbylglon16/4/10.*/publicclassMyServiceextendsService{@OverridepublicIBinderonBind(Intentintent){returnnull;}}记得要注册哦serviceandroid:name=.MyService/好了,我们现在来看看怎么启动,其实跟activity一模一样caseR.id.startservice:Intenti=newIntent(this,MyService.class);//启动服务startService(i);break;我们启动之后就可以在后台看到这里我们可以看到有一个服务2.停止服务停止服务就相对来讲很简单了,首先我们定义一个ButtonButtonandroid:id=@+id/stopserviceandroid:layout_width=wrap_contentandroid:layout_height=wrap_contentandroid:text=停止服务/然后就可以手动停止了caseR.id.stopservice:Intentintent=newIntent(this,MyService.class);//停止服务stopService(intent);break;这样就停止了3.声明周期用一张图表示,毕竟天天看Activity的生命周期,这个看懂不是难事@OverridepublicintonStartCommand(Intentintent,intflags,intstartId){returnsuper.onStartCommand(intent,flags,startId);}@OverridepublicvoidonCreate(){super.onCreate();}@OverridepublicvoidonDestroy(){super.onDestroy();}这里不多做介绍4.通话录音机我们来写个小案例,就是用service监听通话,录音之后保存下来,我們在button中启动这个service,然后在service中一创建,我们就获取电话状态@OverridepublicvoidonCreate(){super.onCreate();getService();}publicvoidgetService(){//服务一创建就监听TelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);tm.listen(newmyListener(),PhoneStateListener.LISTEN_CALL_STATE);}classmyListenerextendsPhoneStateListener{//电话状态改变的回调@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){super.onCallStateChanged(state,incomingNumber);//判断当前的状态switch(state){//电话空闲caseTelephonyManager.CALL_STATE_IDLE:Log.i(myListener,电话空闲);break;//电话响铃caseTelephonyManager.CALL_STATE_RINGING:Log.i(myListener,电话响铃);break;//正在通话caseTelephonyManager.CALL_STATE_OFFHOOK:Log.i(myListener,电话通话);break;}}}这里隐私授权,需要权限哦uses-permissionandroid:name=android.permission.READ_PHONE_STATE/那我们先来调试一下,我们点击启动服务现在我们可以在响铃就开始准备录音资源了//电话响铃caseTelephonyManager.CALL_STATE_RINGING:Log.i(myListener,电话响铃);//判断硬件是否支持录音if(recorder==null){getRecorder();}break;录音方法/***通话录音*/privatevoidgetRecorder(){recorder=newMediaRecorder();//麦克风recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置格式3GPrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置保存目录权限recorder.setOutputFile(sdcard/audio.3gp);//设置音频编码recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);try{//准备录音recorder.prepare();}catch(IOExceptione){e.printStackTrace();}}这里准备好了之后,我们只要接通了就开始录音//正在通话caseTelephonyManager.CALL_STATE_OFFHOOK:Log.i(myListener,电话通话);if(recorder!=null){//开始录音recorder.start();}break;当我们挂断电话,电话状态重新回到空闲的时候就停止并且释放资源//电话空闲caseTelephonyManager.CALL_STATE_IDLE:Log.i(myListener,电话空闲);if(recorder!=null){//停止录音recorder.stop();//释放资源recorder.release();recorder=null;}break;我们来测试一下,我们拨打一个电话,状态是这样的我们去目录下翻一翻这里,可以看到有一个audio.3gp说明我们录音成功了完整代码MyServicepackagecom.lgl.servicedemo;importandroid.app.Service;importandroid.content.Intent;importandroid.media.MediaRecorder;importandroid.os.IBinder;importandroid.telephony.PhoneStateListener;importandroid.telephony.TelephonyManager;importandroid.util.Log;importjava.io.IOException;/***电话录音*Createdbylglon16/4/10.*/publicclassMyServiceextendsService{//录音privateMediaRecorderrecorder;@OverridepublicIBinderonBind(Intentintent){returnnull;}@OverridepublicintonStartCommand(Intentintent,intflags,intstartId){returnsuper.onStartCommand(intent,flags,startId);}@OverridepublicvoidonCreate(){super.onCreate();getService();}/***获取电话状态*/publicvoidgetService(){//服务一创建就监听TelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);tm.listen(newmyListener(),PhoneStateListener.LISTEN_CALL_STATE);}classmyListenerextendsPhoneStateListener{//电话状态改变的回调@OverridepublicvoidonCallStateChanged(intstate,StringincomingNumber){super.onCallStateChanged(state,incomingNumber);//判断当前的状态switch(state){//电话空闲caseTelephonyManager.CALL_STATE_IDLE:Log.i(myListener,电话空闲);if(recorder!=null){//停止录音recorder.stop();//释放资源recorder.release();recorder=null;}break;//电话响铃caseTelephonyManager.CALL_STATE_RINGING:Log.i(myListener,电话响铃);//判断硬件是否支持录音if(recorder==null){getRecorder();}break;//正在通话caseTelephonyManager.CALL_STATE_OFFHOOK:Log.i(myListener,电话通话);if(recorder!=null){//开始录音recorder.start();}break;}}}/***通话录音*/privatevoidgetRecorder(){recorder=newMediaRecorder();//麦克风recorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置格式3GPrecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置保存目录权限recorder.setOutputFile(sdcard/audio.3gp);//设置音频编码recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);try{//准备录音recorder.prepare();}catch(IOExceptione){e.printStackTrace();}}@OverridepublicvoidonDestroy(){super.onDestroy();}}5.Service的两种启动方式servic启动有两种方式,我们来比对一下。我们写一个新建一个项目ServiceTwoactivity_main.xml?xmlversion=1.0encoding=utf-8?LinearLayoutxmlns:android=:tools=
本文标题:Android实训案例(七)四大组件之一Service初步了解,实现通话录音功能,抽调接口
链接地址:https://www.777doc.com/doc-2897642 .html