我无法在 Android Q 中获得拨出电话号码。
我已经使用此意图过滤器android.intent.action.NEW_OUTGOING_CALL
在清单中注册了接收者,并且在代码中我正在检测像这样的传出电话号码
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL"))
String nr = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
但是我永远无法在 Android Q 中获得去电电话号码,是否有变通方法来获得该电话号码,或者因为 Android Q 完全不可能检测到去电电话号码?
编辑:它适用于以前的android版本
答案 0 :(得分:0)
来自 android.intent.action.NEW_OUTGOING_CALL 的文档:
在API级别29中不推荐使用此常数。重定向的应用 拨出电话应使用CallRedirectionService API。的应用 执行呼叫筛选应使用CallScreeningService API。
https://developer.android.com/reference/android/content/Intent
因此,我将首先实现此API,并检查其是否按预期工作。
答案 1 :(得分:0)
您需要添加PROCESS_OUTGOING_CALLS权限
创建OutgoingCallReceiver
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
public class OutgoingCallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
if (tm.getCallState() == TelephonyManager.CALL_STATE_OFFHOOK) {
String number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
}
}
}
添加必需的权限以读取AndroidManifest文件中的即将结束的呼叫
<uses-permission android:name="android.permission.NEW_OUTGOING_CALL" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
在运行时请求权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.PROCESS_OUTGOING_CALLS, Manifest.permission.READ_PHONE_STATE},
1);
}
在AndroidManifest文件中添加OutgoingCallReceiver
<receiver
android:name=".application.services.OutgoingCallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
此代码对您来说很好用,但是当您需要将应用程序上传到Google Play上时,可以使用NEW_OUTGOING_CALL和READ_PHONE_STATE权限,但是, 您将从playStore收到以下政策通知:
您的应用清单请求“呼叫记录”权限组(例如PROCESS_OUTGOING_CALLS) 它必须在设备上主动注册为默认的Phone或Assistant处理程序。
在这种情况下,只有当您想读取OutCommingCall号码时,才有两种解决方案:
将声明表单发送到Google declaration form
或将您的应用程序拨号器应用设为