我对Android非常新,我目前正在开发一款应用程序,该应用程序应该在KioskMode中运行,以便普通用户无法退出应用程序或执行任何操作在它之外。
我已经做了:Android Kiosk模式 - 防止用户“未经授权”取消固定应用程序
- 我把我的应用程序的设备所有者
- 我“屏幕针”在OnCreate()的应用程序 - 方法在MainActivity作为设备所有者
- 我有MainActivity中的一个按钮,稍后通过输入密码允许管理员退出。调用stopLockTask()
我现在遇到的,任何用户都可以退出屏幕,只需长按“后退”,同时,“多任务处理”按钮,因为该应用程序应该运行在平板电脑具有hardwarebuttons钉扎问题我不能简单地停用。 (至少我不知道如何做到这一点没有根植设备)
那么有没有什么办法来停用这个按钮组合来退出屏幕锁定,或者一些整洁的解决方法? 我想到的一种方法是在onLockTaskModeExiting()的AdminReceiver类中重新编写应用程序,但我仍然坚持如何执行此操作。
这里是我的MainActivity的某些代码段和AdminReceiver类:
AdminReceiver.java
public class AdminReceiver extends DeviceAdminReceiver{
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return context.getString(R.string.device_admin_warning);
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.device_admin_disabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_enabled), Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
Toast.makeText(context, context.getString(R.string.kiosk_mode_disabled), Toast.LENGTH_SHORT).show();
}
}
MainActivity.java
public class MainActivity extends Activity {
private DevicePolicyManager mDpm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ComponentName deviceAdmin = new ComponentName(this, AdminReceiver.class);
mDpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
if (!mDpm.isAdminActive(deviceAdmin)) {
Toast.makeText(this, getString(R.string.not_device_admin), Toast.LENGTH_SHORT).show();
}
if (mDpm.isDeviceOwnerApp(getPackageName())) {
Toast.makeText(this, getString(R.string.device_owner), Toast.LENGTH_SHORT).show();
mDpm.setLockTaskPackages(deviceAdmin, new String[]{getPackageName()});
startLockTask();
} else {
Toast.makeText(this, getString(R.string.not_device_owner), Toast.LENGTH_SHORT).show();
}
Button exit = (Button) findViewById(R.id.exit);
exit.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
stopLockTask();
}
});}
任何帮助,高度赞赏。谢谢!
如何将您的应用程序设置为设备所有者?如果您的应用程序实际设置为设备所有者,则最近的按钮也将被隐藏。有关更多信息,请参阅示例DPC。 – bmg
@Phil,是啊你是如何设置设备所有者? – portfoliobuilder