【问题标题】:Perform calls in Android Locktask mode在 Android Locktask 模式下执行呼叫
【发布时间】:2017-01-23 12:29:14
【问题描述】:

TL;DR 使用Activity.startLockTask()时如何拨打电话?

我正在尝试在 Android 设备上设置受限环境,即通常称为“Kiosk 模式”的环境。

官方文档可以在这里找到: https://developer.android.com/work/cosu.html

官方建议使用Activity.startLockTask

在您想从处于startLockTask() 模式的Activity 中启动其他应用程序之前,这可以正常工作。 任何启动的活动都不得在新的任务堆栈上启动,否则系统会阻止启动意图,即没有Intent.FLAG_ACTIVITY_NEW_TASK

一些应用程序可以直接启动,其他应用程序似乎隐式设置了这个标志,但可以通过使用startActivityForResult(...) 来解决,这似乎删除了NEW_TASK 标志。对于仍然无法运行的应用,我可以编写自己的替代代码。

真正的问题是调用应用程序,它强制执行新的任务堆栈。触发呼叫发起呼叫,不会显示呼叫活动,但还会在状态栏中放置呼叫通知(使用startLockTask() 时无法访问。 与其他应用程序相比,通话应用程序也是无法用自定义应用程序替换的应用程序...

DevicePolicyManager.html.setLockTaskPackages() 对此行为没有影响。

【问题讨论】:

  • 我遇到了同样的问题。我需要一种在信息亭模式下拨打/拨打电话的方法,但无法完成这项工作。你找到解决办法了吗?
  • 我们也面临同样的问题。我们已经处理了拨出电话,但对于来电,它没有显示来电活动
  • 解决了吗?

标签: android android-intent kiosk kiosk-mode cosu


【解决方案1】:

我尝试在锁定模式下启动呼叫意图,弹出此行:

    system_process E/ActivityManager: Attempted Lock Task Mode violation mStartActivity=ActivityRecord{56ab302 u0 com.android.server.telecom/.components.UserCallActivity t155}

所以我加了

    setLockTaskPackages(<ComponentName>,new String[]{getPackageName(),"com.google.android.dialer","com.android.server.telecom"});

设法让拨号器退出。当然,如果我按下主页按钮或返回按钮,就无法让拨号器恢复正常……不过,最近的按钮仍然被锁定。接听电话完美(所有按钮都被禁用)

【讨论】:

  • 如果您随后从拨号器发起呼叫会怎样?
  • 抱歉,我的通话意图直接提供了电话号码。
  • 我们需要确保我们谈论的是同一件事。有呼叫活动和拨号活动。呼叫活动是在您从 dailer 按“呼叫”时开始的。
  • 'Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + ""));'
【解决方案2】:

你试过了吗?

setLockTaskPackages(new ComponentName(this, DeviceAdminReceiver.class),new String[]{getPackageName(),"com.google.android.dialer"});

【讨论】:

  • 没什么区别。问题是调用应用程序/活动强制一个新的任务堆栈,这正是锁定模式所阻止的,因此隐藏了调用 UI。
猜你喜欢
  • 1970-01-01
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多