bind方式开启服务的特点
1)电话窃听器案例:
实现步骤:
【1】定义一个服务 开启服务 一定要在清单文件中配置
【2】在服务的onCreate()方法里 获取TelephonyManager的实例
//获取TelephonyManager的实例
TelephonyManager tm= (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
【3】//注册电话的监听
tm.listen(new MyPhoneStateListener(),PhoneStateListener.LISTEN_CALL_STATE);
【4】定义一个类来监听电话的状态
代码:
public class PhoneService extends Service {
private MediaRecorder recorder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
//获取TelephonyManager的实例
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
//注册电话的监听
tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
//定义一个类来监听电话状态
private class MyPhoneStateListener extends PhoneStateListener {
@Override
public void onCallStateChanged(int state, String phoneNumber) {
//具体判断电话状态
switch (state) {
case TelephonyManager.CALL_STATE_IDLE://空闲状态
if (recorder != null) {
recorder.stop();//停止录音
recorder.reset();
recorder.release();
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK://接听状态
System.out.println("开始录");
recorder.start();
break;
case TelephonyManager.CALL_STATE_RINGING://响铃状态
System.out.println("准备录音机");
//创建MediaRecorder 的实例
recorder = new MediaRecorder();
//设置音频来源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
System.out.println("准备录");
//设置输出格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置音频的编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//设置存放路径
recorder.setOutputFile("/mnt/sdcard/luyin.3gp");
//准备录
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
super.onCallStateChanged(state, phoneNumber);
}
}
}
在服务中动态注册特殊的广播接收者