如何在 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)