1,StartService开启服务可以保证在后台长期运行
2,手机监听
需求:当电话响起接听后录音。电话响起android自己会发一个广播出去,设置一个广播接受者监听,当接受到广播开启服务。
import java.io.IOException;
import android.R.menu;
import android.app.Service;
import android.content.Intent;
import android.media.MediaRecorder;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class PhoneService extends Service {
private MediaRecorder recorder;
@Override
public IBinder onBind(Intent intent) {
return null;
}
// 当服务启动这个方法执行 在这个方法里面去监听电话的状态
@Override
public void onCreate() {
super.onCreate();
// [1]获取电话的管理这
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
// [2]注册一个监听对象 来监听电话状态改变
tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
}
// 定义一个电话监听器对象
private class MyPhoneStateListener extends PhoneStateListener {
// 当电话状态发生改变的的时候执行
@Override
public void onCallStateChanged(int state, String incomingNumber) {
// [1]具体判断一下电话的状态
switch (state) {
case TelephonyManager.CALL_STATE_IDLE: //空闲状态
//当挂断电话 停在录音
if (recorder!=null) {
//停在录
recorder.stop();
recorder.reset(); // You can reuse the object by going back to setAudioSource() step
recorder.release(); // Now the object cannot be reused
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK://钩子 摘机 接听状态
recorder.start(); // Recording is now started
System.out.println("开始录音");
break;
case TelephonyManager.CALL_STATE_RINGING: //响铃状态
System.out.println("准备一个录音机");
//[1]创建MediaRecorder实例
recorder = new MediaRecorder();
//[2]设置音频来源
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//[3]设置 音频输出的格式
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//[4] 设置音频的编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//[5]设置音频保存的位置
recorder.setOutputFile("/mnt/sdcard/test.3gp");
//[6]准备开始录
try {
recorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
}
}
}
B,创建一个广播,在开机后打开服务,找一个类继承BoradcastReceiver
public class BootReceiver extends BroadcastReceiver {
//当手机重新启动的时候执行 在这个方法里面开启服务
@Override
public void onReceive(Context context, Intent intent) {
//开启服务
Intent intent1 = new Intent(context,PhoneService.class);
context.startService(intent1);
}
}
C,AndroiodManifest
<!-- 配置广播接收者 -->
<receiver android:name="com.xiaoshuai.phonelistener.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!-- 配置服务 -->
<service android:name="com.xiaoshuai.phonelistener.PhoneService" >
</service>
添加权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />