在Android P中,要在没有CALL_LOG权限的情况下获取来电号码,可以使用以下解决方法:
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) {
String incomingNumber = telephonyManager.getLine1Number();
// 使用来电号码进行相关操作
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// 如果没有权限,则请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_CODE);
} else {
// 如果已经有权限,则获取来电号码
String incomingNumber = telephonyManager.getLine1Number();
// 使用来电号码进行相关操作
}
// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予,获取来电号码
String incomingNumber = telephonyManager.getLine1Number();
// 使用来电号码进行相关操作
} else {
// 权限被拒绝,处理相应逻辑
}
}
}
请注意,Android P引入了更严格的权限控制,CALL_LOG权限需要用户明确授予。如果用户拒绝授予CALL_LOG权限,你将无法在没有CALL_LOG权限的情况下获取来电号码。