Android API23之后的服务是不是在活动销毁后就不能得到危险权限的授权了

做了一个电话监听器,在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开启服务并不销毁才有用

http://www.tuicool.com/articles/V3eErq