我有两个两者启用了自助服务终端模式的应用。我目前从一个发送数据到另一个发送数据。我想告诉接收应用程序开始一项新活动。
在大多数情况下,我可以使用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
是否可以通过广播接收器发送上下文,以便我可以使用该上下文启动所需的活动?任何人都可以建议除了使用广播开始新活动之外的其他方法吗?
答案 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
找到有关此主题的大量信息