做了一个电话监听器,在4.x中是好用的,可是在6.0之后设置为开机启动并不启动activity后,发现服务是开着的,但是没有得到实行
PhoneReceiver
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent intent1 = new Intent(context,PhoneListener.class);
context.startService(intent1);
}
}
PhoneListener
public class PhoneListener extends Service {
private static final String TAG = "PhoneListener";
private MediaRecorder recorder;
public PhoneListener() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
tm.listen(new TelephonyListener(),PhoneStateListener.LISTEN_CALL_STATE);
Log.d(TAG, "onCreate: 我开启了");
super.onCreate();
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy: 我销毁了");
super.onDestroy();
}
private class TelephonyListener extends PhoneStateListener{
@Override
public void onCallStateChanged(int state, String incomingNumber) {
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:
Log.d(TAG, "onCallStateChanged: 接听了");
recorder.start(); // Recording is now started
break;
case TelephonyManager.CALL_STATE_RINGING:
Log.d(TAG, "onCallStateChanged: 响铃了");
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/mnt/sdcard/aaa.3gp");
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
break;
}
super.onCallStateChanged(state, incomingNumber);
}
}
}
然后结果就是提示创建了,方法也进去了但是state不会改变,除非用activity开启服务并不销毁才有用