0

最高包括 Android 9,我的应用程序可以在没有人工干预的情况下拨打号码。

随着 Android 10 的更新,调用是在用户存在应用程序后进行的。

这是进行调用的函数:

    /**
     * Call the given number if no other call is busy.
     *
     * @param number Number to call
     */
    private void callNumber(String number) {
        if(!Utils.isCallActive()) {
            // ACTION_CALL: Direct call
            this.startIntent(new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+number)));
        }
    }

向用户请求相关权限并启用:

    <uses-permission android:name="android.permission.CALL_PHONE" />

开发人员文档不建议做任何其他事情: https ://developer.android.com/guide/components/intents-common#DialPhone

在此之前,应用程序已在活动中被置于最前面(传入的推送会唤醒触发此行为的应用程序)。

我想知道这是否会产生影响:

        orgFlags=window.getAttributes().flags;
        window.addFlags(
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
                        | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
                        | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
        );

对于处理拨出呼叫的应用程序, ACTION_NEW_OUTGOING_CALL 已被弃用,但我看不出这会如何影响请求呼叫的应用程序。

我将测试当前活动的呼叫完成是否有帮助。

最后的问题是: 在Android 10中,如何保证应用可以触发直接呼出而无需人工交互?

4

1 回答 1

0

对正在运行的活动进行调用可以启用在调用之前finish()使用调用触发的“直接调用” 。startIntent(...)finish()

编辑:不幸的是,这不是一个完美的解决方案:它并非在所有情况下都有效。

于 2020-07-22T12:10:53.957 回答