Android中的Kiosk模式

Eri*_*rik 110 android kiosk kiosk-mode

我正在评估是否以及如何移植CF .NET企业应用程序以在Android设备上运行.Windows Mobile手机上的应用程序以kiosk模式运行,其中应用程序在启动后以全屏模式自动启动,并且用户无法意外或自愿访问手机的任何其他部分.

Android上是否可以在启动后只有一个应用程序自动启动,并防止用户意外(或自愿)访问Android设备的任何其他部分?

Val*_*tin 27

您可以通过android.intent.action.BOOT_COMPLETED在BroadcastReceiver中监听intent并从那里启动Activity 来自动启动应用程序.在活动中,您可以将自己注册为新的默认主屏幕[1]并处理密钥.

我认为有些实例在没有修改框架的情况下无法处理(例如Home上的longpress显示当前活动的应用程序) - 但我也可能会弄错.

但对于一个可能足够的原型.

玩得开心修补!

[1]:

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)


rbo*_*bot 17

您可以自定义此功能(禁用对菜单的访问,限制应用程序添加等)以启用自助服务终端.http://code.google.com/p/android-launcher-plus/

  • 我能知道为什么这会被投票吗?我通过在Android启动器加上编辑和开发编写了我的完整版,目前部署的Android自助服务终端应用程序. (7认同)

nha*_*man 17

在新的Android L Preview中,谷歌已经宣布了Task Locking,它就是这样做的.但它似乎确实需要root.

L Developer Preview引入了一个新的任务锁定API,可让您临时限制用户离开您的应用或被通知中断.例如,如果您正在开发教育应用程序以支持Android上的高风险评估要求,则可以使用此功能.一旦您的应用激活此模式,用户将无法看到通知,访问其他应用或返回主屏幕,直到您的应用退出该模式.

为防止未经授权的使用,只有授权的应用才能激活任务锁定 此外,任务锁定授权必须由特殊配置的设备所有者应用程序通过该android.app.admin.DevicePolicyManager.setLockTaskComponents()方法授予 .

要设置设备所有者,请按以下步骤操作:

  • 将运行Android userdebug版本的设备连接到开发计算机.
  • 安装您的设备所有者应用.
  • 创建一个device_owner.xml文件并将其保存到/data/system设备上的目录中.
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot
Run Code Online (Sandbox Code Playgroud)

在应用程序中使用任务锁定API之前,请通过调用DevicePolicyManager.isLockTaskPermitted()来验证您的活动是否已获得授权.

要激活任务锁定,请android.app.Activity.startLockTask() 从授权活动中致电.

当任务锁定处于活动状态时,以下行为将生效:

  • 状态栏为空白,隐藏用户通知和状态信息.
  • 主页和最近的应用程序按钮被隐藏.
  • 其他应用可能无法启动新活动.
  • 当前应用程序可能会启动新活动,只要这样做不会创建新任务.
  • 在授权活动呼叫之前,用户将保持锁定在您的应用上 Activity.stopLockTask().

  • http://developer.android.com/guide/topics/admin/device-admin.html - 有关部署Device Admin App的信息. (3认同)
  • 这是我有关具有完整设置算法的任务锁的文章http://pvolan.blogspot.ru/2017/01/android-50-kiosk-mode-aka-super.html (2认同)

mat*_*gic 9

经过一段时间的搜索,我找到了一个很好的解决方案.这只适用于root设备,但我想如果只是这个应用程序,那么生根应该不是问题.

还检查了http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/另一种方式


小智 5

在启动时启动您的应用程序

实现此目的的最佳方法是将您的应用设置为启动器

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.HOME" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

锁定您的应用

最可靠的方法是使用 Lollipop 或更高版本的设备并利用

startLockTask
Run Code Online (Sandbox Code Playgroud)

首先,您必须将您的应用设置为设备所有者。注意你的设备必须是未配置的:如果你注册了它,你应该恢复出厂设置并跳过帐户注册。

为了能够注册您的应用程序,您必须首先设置一个 DeviceAdminReceiver 组件:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦你有一个未配置的设备,你可以从 adb 启动以下命令(不需要 root

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver
Run Code Online (Sandbox Code Playgroud)

为避免 android 要求用户权限来固定您的应用程序,您必须调用 setLockTaskPackages

最后!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}
Run Code Online (Sandbox Code Playgroud)


Fre*_*red 5

Google 最近发布了Android Management API,它允许为运行 Android 5.1 或更高版本的任何 Android 设备轻松设置信息亭模式,并设置各种其他策略。


归档时间:

查看次数:

86973 次

最近记录:

8 年,4 月 前