【问题标题】:Android Run another application while task lockAndroid 在任务锁定时运行另一个应用程序
【发布时间】:2016-12-20 08:33:35
【问题描述】:

我将我的应用程序设置为设备所有者,并且当我调用 startLockTask() 时屏幕处于固定状态。当我尝试使用此方法运行另一个应用程序时,我现在遇到的问题:

Intent i = getPackageManager().getLaunchIntentForPackage("com.example.test");
startActivityForResult(i,Intent.FLAG_ACTIVITY_NEW_TASK);

(什么都没有发生) 我必须做什么才能让它运行?

编辑:我尝试添加

 dpm.setLockTaskPackages(deviceAdmin, new String[] { getPackageName() ,"com.example.test"});

它也没有启动。

【问题讨论】:

  • 你想做什么?应用信息亭? (限制设备只能使用特定的应用程序?)
  • 你能一步一步描述你想要做什么以及你是如何做到的吗?

标签: android android-activity android-5.0-lollipop kiosk-mode


【解决方案1】:

您应该检查设备上是否安装了带有applicationId 的应用程序。例如,在您的情况下,applicationIdcom.example.test。 如果未安装应用程序,您可以将用户带到市场或让他们选择应用程序。

String packageName = "com.example.test";
.
.
.
Intent i = context.getPackageManager().getLaunchIntentForPackage(packageName);
if (i == null) {
    i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse("market://details?id=" + packageName));
    // Open app in google play store: 
    // i.setData(Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName));
}
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

【讨论】:

【解决方案2】:

DPC 必须先将应用列入白名单,然后才能在锁定任务模式下使用它们。调用DevicePolicyManager.setLockTaskPackages() 将锁定任务模式的应用列入白名单,如以下示例所示:

// Whitelist two apps.

private static final String KIOSK_PACKAGE = "com.example.kiosk";

private static final String PLAYER_PACKAGE = "com.example.player";

private static final String[] APP_PACKAGES = {KIOSK_PACKAGE, PLAYER_PACKAGE};
// ...

Context context = getContext();

DevicePolicyManager dpm =
    (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminName = getComponentName(context);
dpm.setLockTaskPackages(adminName, APP_PACKAGES);

您可以在应用清单文件中声明当系统在锁定任务模式下运行时 Activity 的行为方式。要让系统在锁定任务模式下自动运行您的活动,请将android:lockTaskMode 属性设置为if_whitelisted

android:lockTaskMode="if_whitelisted">

取自https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode#java

【讨论】:

    【解决方案3】:

    当您使用 FLAG_ACTIVITY_NEW_TASK 启动应用程序时,只需尝试使用 startActivity。

    Intent i = getPackageManager().getLaunchIntentForPackage("com.example.test");
    startActivity(i);
    

    我们不应该在锁定任务模式下将 FLAG_ACTIVITY_NEW_TASK 与 startActivityForResult 一起使用。

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2021-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多