首页 > 解决方案 > 在 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,但仍然相同。

标签: androidandroid-10.0

解决方案


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
            }

        }
    }

推荐阅读