android四大组件之服务(Service)

服务(Service)


一、基本概念
1、Service是一种在后台运行,没有界面的组件,由其他组件调用开始。
2、创建Service,定义类继承Service,AndroidManifest.xml中定义<service>
3、开启Service,在其他组件中调用startService方法
4、停止Service,调用stopService方法

二、电话录音

TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
manager.listen(new MyListener(), PhoneStateListener.LISTEN_CALL_STATE);

private final class MyListener extends PhoneStateListener {
	private String num;
	private MediaRecorder recorder;
	public void onCallStateChanged(int state, String incomingNumber) {
		switch (state) {
			case TelephonyManager.CALL_STATE_RINGING:
				num = incomingNumber;
				break;
			case TelephonyManager.CALL_STATE_OFFHOOK:
				try {
					File file = new File(Environment.getExternalStorageDirectory(), num + "_" + System.currentTimeMillis() + ".3gp");
					recorder = new MediaRecorder();
					recorder.setAudioSource(AudioSource.MIC);
					recorder.setOutputFormat(OutputFormat.THREE_GPP);
					recorder.setAudioEncoder(AudioEncoder.AMR_NB);
					recorder.setOutputFile(file.getAbsolutePath());
					recorder.prepare();
					recorder.start();
				} catch (Exception e) {
					e.printStackTrace();
				}
				break;
			case TelephonyManager.CALL_STATE_IDLE:
				if (recorder != null) {
					recorder.stop();
					recorder.release();
				}
				break;
		}
	}
}

三、绑定本地服务
1、使用bindService绑定服务,传入一个自定义的ServiceConnection用来接收IBinder
2、定义一个业务接口,其中定义需要的使用的方法
3、服务中自定义一个IBinder继承Binder并实现业务接口,在onBind方法中返回
4、调用端将IBinder转为接口类型,调用接口中的方法即可调用到服务中的方法
四、绑定远程服务
1、远程绑定服务时无法通过同一个接口来调用方法,这时就需要使用AIDL技术
2、将接口扩展名改为“.aidl”
3、去掉权限修饰符
4、gen文件夹下会生成同名接口
5、将服务中自定义的IBinder类改为继承接口中的Stub
6、ServiceConnection中返回的IBinder是代理对象,不能使用强转,改用Stub.asInterface()
五、AIDL使用自定义类型
1、AIDL默认只能使用Java中基本数据类型和String、List、Map,List和Map中的元素类型也只能是这些类型。
2、如果需要使用其他类型数据,使用的类必须实现Parcelable接口以完成序列化和反序列化工作
重写 public void writeToParcel(Parcel dest, int flags)
定义 public static final Parcelable.Creator<Person> CREATOR
3、定义该类对应的AIDL
package 包名
parcelable 类名
4、在接口AIDL中导入该类,注意:即使是同一个包也需要导入
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值