Я довольно новичок в Android, и в настоящее время я разрабатываю приложение для Android, которое должно работать в KioskMode, чтобы обычный пользователь не мог выйти из приложения или сделать что-либо вне его.
То, что я уже сделал:Android Kiosk Mode - Предотвращение пользователей от «несанкционированного» отказа от приложения
- Я установил мое приложение в качестве владельца устройства
- I «экран контактный» приложение в OnCreate() - метод в MainActivity как владелец устройства
- У меня есть кнопку в MainActivity, которая позже позволяет администратору выйти, введя пароль. Вызывает stopLockTask()
Проблема я столкнулся сейчас, что любой пользователь может выйти из экрана Закрепление просто долгое нажатие «назад» и «многозадачности» кнопки одновременно, так как планшет, на котором приложение должно работать имеет hardwarebuttons который я не могу просто отключить. (по крайней мере, я не знаю, как это сделать, не укореняя устройство)
Итак, есть ли способ деактивировать эту комбинацию кнопок для выхода из экрана или какого-нибудь аккуратного обходного пути? Один из подходов, который я думал о повторении приложения в моем классе AdminReceiver в onLockTaskModeExiting(), но я все еще придерживаюсь того, как это сделать.
Вот некоторые фрагменты кода моего 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