android - 在 Android 10 上拨打电话
问题描述
我做了一个应用程序,如果预先配置的代码以短信形式到达,它会自动拨打电话。
我最初在 Android 9 上构建了这个应用程序,只要我使用的是 Android 9,它就可以正常工作,但是我的手机升级到了 Android 10 版本,它就停止了工作。
分析日志和调试应用程序,没有出现一条错误消息。调试一切正常,我将活动称为如下:
Intent in = new Intent(Intent.ACTION_CALL);
in.setData(Uri.parse(callPhone));
in.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(in);
但什么也没有发生。它只是不打电话。我使用其他版本的 android 安装在其他设备上并且仍然可以工作,但在 Android 10 中不行。
任何人都知道是否实施了一些不同的事情,或者是否有一种新的方式可以在 Android 10 版本上拨打电话?
*注意:我还尝试更新代码以使用 androidx 库,更改为使用 targetSdkVersion 29,但仍然相同。
解决方案
Android 10 仅限于从后台启动活动。对此有一些例外情况。在我看来,请求“SYSTEM_ALERT_WINDOW”权限是最简单的。希望能帮助到你。
https://developer.android.com/guide/components/activities/background-starts
https://stackoverflow.com/a/59421118/11982611
在清单中:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
在您的代码中的某处
private void RequestPermission() {
// Check if Android M or higher
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
// Show alert dialog to the user saying a separate permission is needed
// Launch the settings activity if the user prefers
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getActivity().getPackageName()));
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(getContext())) {
PermissionDenied();
}
else
{
//Permission Granted-System will work
}
}
}
推荐阅读
- java - 应用程序启动方法错误中的异常。我在 IntellJ 中使用 JavaFX
- asp.net-mvc - 间歇性“nonce 为空”错误的最佳方法
- error-handling - 如果 Zapier 拥有的 Webhook 没有由活动的 zap 提供服务,有什么注意事项吗?
- c++ - 为父类中的子类变量定义getter
- android - 将 .so 库添加到 Android 10 构建的正确方法
- javascript - JQuery UI Autocomplete,如何遍历其他元素
- swift - Kotlin 等效于扩展和缩减
- python - Python代码仅打印以A开头的列表中的单词
- spring-cloud - 当请求是多部分时,预请求过滤器(使用 webclient 进行 REST 调用)失败
- terraform - Terrafrom 和 MySQL:访问被拒绝