您的位置:首页 > 移动开发 > Android开发

android四大组件之服务(Service)

2013-09-09 15:34 441 查看
服务(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中导入该类,注意:即使是同一个包也需要导入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: