如何在 Android 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?

Posted

技术标签:

【中文标题】如何在 Android 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?【英文标题】:How to fix a direct outgoing call without human interaction in Android 10 (works in Android 9)? 【发布时间】:2020-11-11 22:55:09 【问题描述】:

最高包括 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

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

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

        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 中如何确保应用无需人工干预即可触发直接拨出电话?

【问题讨论】:

【参考方案1】:

在正在运行的 Activity 上调用 finish() 会启用在调用 finish() 之前使用 startIntent(...) 调用触发的“直接调用”。

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

【讨论】:

以上是关于如何在 Android 10(适用于 Android 9)中修复无需人工交互的直接拨出电话?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Android 的 aapt 和 adb 在没有 ia32-libs 的 64 位 Ubuntu 上工作(适用于版本 12、13 和 14)

如何使用适用于 Android 和 iOS 的 Xamarin 表单在特定频道上的 youtube 上上传视频?

如何显示水平和垂直渐变分隔线?

React Native - 如何在 React Native 应用程序中使用 WebView 显示我的网站通知(适用于 Android)

适用于Chrome或Firefox的Kiosk模式

适用于 iOS/Android 的 AWS 移动开发工具包中内置的网络安全性如何?