Ich bin ziemlich neu bei Android und ich entwickle derzeit eine Android App, die in KioskMode ausgeführt werden sollte, so dass ein normaler Benutzer die Anwendung nicht beenden oder nichts tun kann außerhalb davon.
Was habe ich schon:Android Kiosk-Modus - Verhindern, dass Benutzer die Anwendung "unbefugt" lösen
- Ich habe meine App als Gerätebesitzer
- I "Bildschirm pin" die App in der onCreate() - Methode in der MainActivity als Gerätebesitzer
- Ich habe eine Schaltfläche in der MainActivity, mit der ein Administrator später durch Eingabe eines Passworts beenden kann. Anrufe stopLockTask()
Das Problem, das ich jetzt angetroffen wird, dass jeder Benutzer den Bildschirm verlassen kann Pinning durch einfache langes Drücken der Taste „zurück“ und „Multitasking“ Tasten gleichzeitig, weil die Tablette auf das die App laufen soll hardwarebuttons hat was ich nicht einfach deaktivieren kann. (zumindest weiß ich nicht, wie man das macht, ohne das Gerät zu rooten)
Gibt es also eine Möglichkeit, diese Tastenkombination zu deaktivieren, um das Pinning am Bildschirm zu beenden, oder eine nette Abhilfe? Ein Ansatz, an den ich dachte, war, die Anwendung in meiner AdminReceiver-Klasse in der onLockTaskModeExiting() neu zu pinnen, aber ich bin immer noch dabei, wie das geht.
Hier sind einige Code-Schnipsel meines MainActivity und die AdminReceiver Klasse:
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();
}
});}
Jede Hilfe wird sehr geschätzt. Vielen Dank!
Wie stellen Sie Ihre App als Geräteinhaber ein? Wenn Ihre App tatsächlich als Gerätebesitzer festgelegt ist, wird auch die zuletzt verwendete Schaltfläche ausgeblendet. Weitere Informationen finden Sie im Beispiel-DPC. – bmg
@Phil, ja, wie hast du Device Besitzer eingestellt? – portfoliobuilder