如何在自助服务终端模式下从其他应用启动新活动?

时间:2018-01-10 15:16:55

标签: android android-intent kiosk-mode

我有两个两者启用了自助服务终端模式的应用。我目前从一个发送数据到另一个发送数据。我想告诉接收应用程序开始一项新活动。

在大多数情况下,我可以使用intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);但是...在Kiosk模式下我无法启动新任务。

这是我在broadcastReceiver中所拥有的(我已经验证了其他数据的工作原理)。此代码尝试启动新活动:

            Intent launchIntent = new Intent(Intent.ACTION_MAIN);
            launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // this doesn't work in kiosk mode...
            launchIntent.setComponent(new ComponentName("my.package","my.package.myactivity"));
            try {
                if(launchIntent != null) {
                    context.getApplicationContext().startActivity(launchIntent);
                    Log.i(TAG, "Started activity");
                } else
                    Log.i(TAG, "Intent is null");
            } catch (Exception e) {
                Log.e(TAG, e.toString());
            }

添加标志之前的错误:

Kiosk Mode: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?

添加标志后:

E/ActivityManager(  470): Attempted Lock Task Mode violation

是否可以通过广播接收器发送上下文,以便我可以使用该上下文启动所需的活动?任何人都可以建议除了使用广播开始新活动之外的其他方法吗?

1 个答案:

答案 0 :(得分:2)

注意:在Android“ScreenPinning”中,“Kioskmode”和“Lock Task Mode”是相同的。

来自https://developer.android.com/about/versions/android-5.0.html#ScreenPinning

Once your app activates screen pinning, users cannot (...) 
access other apps (...) until your app exits the mode.

你必须使用stopLockTask()进行临时禁用kioskmode并使用startLockTask()重新启用它

为防止Android要求用户重新启动kioskmode,您还需要实施https://developer.android.com/about/versions/android-5.0.html#DeviceOwner应用

您可以在https://github.com/Tuong-Nguyen/Android/wiki/Research-114-Kiosk-Mode-Android-application

找到有关此主题的大量信息