我们正在开发一个 Android 应用程序,该应用程序旨在替换默认的 Android 拨号程序并自行处理设备中正在进行的所有呼叫。到目前为止,该应用程序按预期运行,我们既可以处理来电,也可以通过启动ACTION_CALL
意图来拨打电话。
但是,此应用旨在通过 Android 管理 API 在信息亭模式下运行。每当我们触发ACTION_CALL
意图时,kiosk 模式都会阻止它,尽管应用程序被设置为默认拨号器。
经过一些调试,我们发现问题在于,在启动 Intent 时,在我们的应用收回请求的控制权之前,系统会尝试启动com.android.server.telecom/.components.UserCallActivity
。当我们的应用程序在 kiosk 模式下运行时,我们收到以下错误logcat
:
10-25 20:29:44.560 1186 3677 E ActivityTaskManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{e45f03 u0 com.android.server.telecom/.components.UserCallActivity t24}
我们尝试了不同的解决方法,但似乎都不起作用。我们弄乱了 Android 管理 API 参数,例如persistentPreferredActivities
或delegatedScopes
。现在,我们认为我们最好的办法是尝试添加com.android.server.telecom
到 locktask 白名单中,如下所示:
var dpm = (DevicePolicyManager)MainActivity.GetSystemService(Context.DevicePolicyService);
if (dpm.IsDeviceOwnerApp(MainActivity.PackageName)){
dpm.SetLockTaskPackages(XXX, new[] { MainActivity.PackageName, "com.android.server.telecom"})
}
但是这种方法需要将我们的应用程序设置为设备管理员,只要我们使用 Android Management API,我们不知道这是否可行。我们也尝试过直接调用 DPC 包,但还是没有成功。
任何帮助将不胜感激。