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中导入该类,注意:即使是同一个包也需要导入
一、基本概念
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中导入该类,注意:即使是同一个包也需要导入
相关文章推荐
- Android 四大组件学习之 Service 服务
- Android笔记---四大组件之Service服务详解
- Android 编程下的四大组件之服务(Service)
- Android四大组件之一Service(服务)
- Java乔晓松-android的四大组件之一Service(服务的绑定)
- Android 四大组件之一:Service后台服务之IntentService
- Android四大组件之Service(二)远程服务(AIDL进程间通信)
- Android四大组件之Service(观第一行代码2随记)一.服务简介
- Android四大组件之 服务Service
- Android四大基本组件(2)之Service 服务与Content Provider内容提供者
- Android四大组件之Service服务
- Android四大组件之Service(服务)实例详解
- Android 编程下的四大组件之服务(Service)
- Android四大组件之---Service(服务)详解
- Android四大组件Service 服务
- Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务
- Android四大组件——Service后台服务、前台服务、IntentService、跨进程服务、无障碍服务、系统服务
- Android四大核心组件之Service:服务
- android四大组件之Service服务之总体概述
- Android四大组件之Service(服务)简单总结