可以在未经许可的情况下使用 TelephonyManager READ_PHONE_STATE

Possible to use TelephonyManager without permission READ_PHONE_STATE

我制作了一个音乐播放器应用程序,当 phone 被调用时我使用了这段代码来暂停歌曲。

但这需要权限 READ_PHONE_STATE,这可能会吓跑一些用户,所以我想知道是否有可能在不请求此权限的情况下以另一种方式实现同​​样的事情?

我的代码

private void callStateListener(){
        //incomingCallPause: checkbox value if user wants to pause when there is an incoming call.
        incomingCallPause = storageUtil.loadSwitchOnCall();
        mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        mPhoneStateListener = new PhoneStateListener(){
            @Override
            public void onCallStateChanged(int state, String incomingNumber) {
                switch (state) {
                    case TelephonyManager.CALL_STATE_OFFHOOK:
                        if (mediaPlayer != null){
                            pauseSong();
                        }
                        break;
                    case TelephonyManager.CALL_STATE_RINGING:
                        if (incomingCallPause && mediaPlayer != null) {
                            pauseSong();
                            NotificationBuilder(PlaybackStatus.PAUSED);
                            incomingCall = true;
                        }
                        break;
                    case TelephonyManager.CALL_STATE_IDLE:
                        if (mediaPlayer != null) {
                            if (incomingCall) {
                                incomingCall = false;
                                NotificationBuilder(PlaybackStatus.PLAYING);
                                if (!mediaPlayer.isPlaying()){
                                    mediaPlayer.start();
                                }
                            }
                        }
                        break;
                }
                super.onCallStateChanged(state, incomingNumber);
            }
        };

根据 Android 官方文档,您需要定义清单权限才能使用 TelephonyManager。

需要Manifest.permission.READ_PHONE_STATE

推荐link: https://developer.android.com/reference/android/telephony/TelephonyManager