ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:155.53KB ,
资源ID:8111297      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8111297.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android实训案例七四大组件之一Service初步了解实现通话录音功能抽调接口.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android实训案例七四大组件之一Service初步了解实现通话录音功能抽调接口.docx

1、Android实训案例七四大组件之一Service初步了解实现通话录音功能抽调接口Android实训案例(七)四大组件之一Service初步了解,实现通话录音功能,抽调接口1.启动服务服务是怎么启动的,我们先定义一个按钮吧 我们还得新建一个类MyServicepackage com.lgl.servicedemo;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;/* * 我的服务 * Created by lgl on 16/4/

2、10. */public class MyService extends Service Override public IBinder onBind(Intent intent) return null; 记得要注册哦 好了,我们现在来看看怎么启动,其实跟activity一模一样case R.id.startservice: Intent i = new Intent(this, MyService.class); /启动服务 startService(i); break;我们启动之后就可以在后台看到这里我们可以看到有一个服务2.停止服务停止服务就相对来讲很简单了,首先我们定义一个Butto

3、n 然后就可以手动停止了 case R.id.stopservice: Intent intent = new Intent(this, MyService.class); /停止服务 stopService(intent); break;这样就停止了3.声明周期用一张图表示,毕竟天天看Activity的生命周期,这个看懂不是难事 Override public int onStartCommand(Intent intent, int flags, int startId) return super.onStartCommand(intent, flags, startId); Overri

4、de public void onCreate() super.onCreate(); Override public void onDestroy() super.onDestroy(); 这里不多做介绍4.通话录音机我们来写个小案例,就是用service监听通话,录音之后保存下来,我們在button中启动这个service,然后在service中一创建,我们就获取电话状态Override public void onCreate() super.onCreate(); getService(); public void getService() /服务一创建就监听 TelephonyMan

5、ager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new myListener(), PhoneStateListener.LISTEN_CALL_STATE); class myListener extends PhoneStateListener /电话状态改变的回调 Override public void onCallStateChanged(int state, String incomingNumber) super.onCallStateChanged(state, incomi

6、ngNumber); /判断当前的状态 switch (state) /电话空闲 case TelephonyManager.CALL_STATE_IDLE: Log.i(myListener, 电话空闲); break; /电话响铃 case TelephonyManager.CALL_STATE_RINGING: Log.i(myListener, 电话响铃); break; /正在通话 case TelephonyManager.CALL_STATE_OFFHOOK: Log.i(myListener, 电话通话); break; 这里隐私授权,需要权限哦那我们先来调试一下,我们点击启动

7、服务现在我们可以在响铃就开始准备录音资源了 /电话响铃 case TelephonyManager.CALL_STATE_RINGING: Log.i(myListener, 电话响铃); /判断硬件是否支持录音 if (recorder = null) getRecorder(); break;录音方法 /* * 通话录音 */ private void getRecorder() recorder = new MediaRecorder(); /麦克风 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); /设置格式 3GP rec

8、order.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); /设置保存目录 权限 recorder.setOutputFile(sdcard/audio.3gp); /设置音频编码 recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try /准备录音 recorder.prepare(); catch (IOException e) e.printStackTrace(); 这里准备好了之后,我们只要接通了就开始录音 /正在通话 case TelephonyMa

9、nager.CALL_STATE_OFFHOOK: Log.i(myListener, 电话通话); if(recorder != null) /开始录音 recorder.start(); break;当我们挂断电话,电话状态重新回到空闲的时候就停止并且释放资源 /电话空闲 case TelephonyManager.CALL_STATE_IDLE: Log.i(myListener, 电话空闲); if(recorder != null) /停止录音 recorder.stop(); /释放资源 recorder.release(); recorder = null; break;我们来测

10、试一下,我们拨打一个电话,状态是这样的我们去目录下翻一翻这里,可以看到有一个audio.3gp说明我们录音成功了完整代码MyServicepackage com.lgl.servicedemo;import android.app.Service;import android.content.Intent;import android.media.MediaRecorder;import android.os.IBinder;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager

11、;import android.util.Log;import java.io.IOException;/* * 电话录音 * Created by lgl on 16/4/10. */public class MyService extends Service /录音 private MediaRecorder recorder; Override public IBinder onBind(Intent intent) return null; Override public int onStartCommand(Intent intent, int flags, int startId)

12、 return super.onStartCommand(intent, flags, startId); Override public void onCreate() super.onCreate(); getService(); /* * 获取电话状态 */ public void getService() /服务一创建就监听 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); tm.listen(new myListener(), PhoneStateListener.LISTEN_

13、CALL_STATE); class myListener extends PhoneStateListener /电话状态改变的回调 Override public void onCallStateChanged(int state, String incomingNumber) super.onCallStateChanged(state, incomingNumber); /判断当前的状态 switch (state) /电话空闲 case TelephonyManager.CALL_STATE_IDLE: Log.i(myListener, 电话空闲); if(recorder !=

14、null) /停止录音 recorder.stop(); /释放资源 recorder.release(); recorder = null; break; /电话响铃 case TelephonyManager.CALL_STATE_RINGING: Log.i(myListener, 电话响铃); /判断硬件是否支持录音 if (recorder = null) getRecorder(); break; /正在通话 case TelephonyManager.CALL_STATE_OFFHOOK: Log.i(myListener, 电话通话); if(recorder != null)

15、 /开始录音 recorder.start(); break; /* * 通话录音 */ private void getRecorder() recorder = new MediaRecorder(); /麦克风 recorder.setAudioSource(MediaRecorder.AudioSource.MIC); /设置格式 3GP recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); /设置保存目录 权限 recorder.setOutputFile(sdcard/audio.3gp); /设置音频编码

16、recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); try /准备录音 recorder.prepare(); catch (IOException e) e.printStackTrace(); Override public void onDestroy() super.onDestroy(); 5.Service的两种启动方式servic启动有两种方式,我们来比对一下。我们写一个新建一个项目ServiceTwoactivity_main.xml MainActivitypackage com.lgl.servicetw

17、o;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;public class MainActivity extends App

18、CompatActivity implements View.OnClickListener private Button btn_start, btn_stop, btn_bind, btn_unbind; private MyConn nn; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); conn = new MyConn(); private

19、 void initView() btn_start = (Button) findViewById(R.id.btn_start); btn_stop = (Button) findViewById(R.id.btn_stop); btn_bind = (Button) findViewById(R.id.btn_bind); btn_unbind = (Button) findViewById(R.id.btn_unbind); btn_start.setOnClickListener(this); btn_stop.setOnClickListener(this); btn_bind.s

20、etOnClickListener(this); btn_unbind.setOnClickListener(this); Override public void onClick(View v) switch (v.getId() case R.id.btn_start: startService(new Intent(this,OneService.class); break; case R.id.btn_stop: stopService(new Intent(this,OneService.class); break; case R.id.btn_bind: bindService(n

21、ew Intent(this,OneService.class),conn,BIND_AUTO_CREATE); break; case R.id.btn_unbind: unbindService(conn); break; /* * 服务回调 */ class MyConn implements ServiceConnection /到服务的连接被建立了 Override public void onServiceConnected(ComponentName name, IBinder service) /到服务的连接中断了 Override public void onServiceD

22、isconnected(ComponentName name) 关于服务里面OneServicepackage com.lgl.servicetwo;import android.app.Service;import android.content.Intent;import android.os.IBinder;/* * Created by lgl on 16/4/10. */public class OneService extends Service /绑定 Override public IBinder onBind(Intent intent) return null; /解绑 O

23、verride public boolean onUnbind(Intent intent) return super.onUnbind(intent); /创建 Override public void onCreate() super.onCreate(); /开始 Override public int onStartCommand(Intent intent, int flags, int startId) return super.onStartCommand(intent, flags, startId); /销毁 Override public void onDestroy()

24、super.onDestroy(); 这里就不赘述了,启动的对应方法,我们通过上面的分析出区别来startService:通过startService启动的服务,该服务所在的进程会变成服务进程bindSevice:进程优先级不变,但是绑定的服务和activity同生共死6.调用service的方法你会发现,如果单纯的看startsevice和bindservice,其实区别不大,其实,bindservice有一个用处就是可以调用service的方法,本身来看的话,你是无法吊桶service的方法的,因为你服务是启动起来的,你不能new,所以这里就要用上bindservice了,我们新建一个TwoService,并且写一个方法 /服务方法 public void isShow() System.out.print(我是服务里的一个方法); 这个button启动 TwoServicepackage com.lgl.servicetwo;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;/* * Created by lgl on 16/4/10. */public class TwoService exten

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1