java - 未经许可可以使用 TelephonyManager READ_PHONE_STATE
问题描述
我制作了一个音乐播放器应用程序,并在电话被呼叫时暂停歌曲,我使用此代码。
但这需要 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
推荐链接: https ://developer.android.com/reference/android/telephony/TelephonyManager