it-swarm.com.de

Bildschirmgestützte Drittanbieter-Apps programmgesteuert

Nachdem ich den Besitz des Geräts erlangt habe, versuche ich, eine Methode zu implementieren, die das Gerät anweist, eine bestimmte App im Kioskmodus (oder im Bildschirmpinning-Modus) zu sperren. Da ich Eigentümer des Geräts bin, wird der Benutzer nicht um die Erlaubnis dazu gebeten.

Auf der Entwickler-Website sagt eine kurze Beschreibung, dass es möglich ist, das zu tun, was ich versuche:

http://developer.Android.com/about/versions/Android-5.0.html#ScreenPinning

Programmgesteuert: Um das Bildschirmpinnen programmgesteuert zu aktivieren, rufen Sie StartLockTask () von Ihrer App aus auf. Wenn die anfordernde App kein Besitzer eines Geräts Ist, wird der Benutzer zur Bestätigung aufgefordert. Eine Geräteeigentümer-App kann Die setLockTaskPackages () -Methode aufrufen, damit Apps ohne den Bestätigungsschritt des Benutzers anpinnbar sein können.

Dies bedeutet, dass ich als Appliance-Besitzer-App andere Apps ohne Benutzerbestätigung anheften kann ... aber ich habe keine Ahnung, wie.

Ich konnte meine eigene App in den fixierten Modus versetzen.

Jede Hilfe wäre dankbar.

13
kash

Die setLockTaskPackages() wird verwendet, um anzugeben, welche Anwendungen (durch ihre Paketnamen) programmgesteuert angeheftet werden können ohne Bestätigung des Benutzers . Die setLockTaskPackages() wird von Ihrem Gerätebesitzer app aufgerufen. höchstwahrscheinlich in der onEnabled()-Methode Ihrer DeviceAdminReceiver).

So haben Sie in Ihrer Geräte-App für Besitzer so etwas wie: 

mDPM.setLockTaskPackages("com.foo.myapp");

und dann in Ihrer Anwendung "com.foo.myapp" werden Sie autorisiert, aufzurufen: 

startLockTask(); 

Ihre Anwendung wechselt sofort in den Pinning-Modus, ohne dass Sie vom Benutzer bestätigt werden müssen.

Wenn Sie Ihre Anwendung nicht zuerst mit registersetLockTaskPackages bearbeiten, wird die Anwendung angeheftet, aber der Benutzer muss zuerst bestätigen.

Beachten Sie auch, dass eine App registered mit setLockTaskPackages() einige andere Verhaltensweisen aufweist als der manual pin :

  • der Benutzer kann die Anwendung nicht durch langes Drücken von Back + Recent Apps lösen. Sie müssen Ihre App programmgesteuert mit stopLockTask() lösen.
  • Die Schaltflächen "Startseite" und "Letzte Apps" sind nicht sichtbar (nicht angezeigt).
  • Wenn die App nicht angeheftet ist (über stopLockTask ()), kehrt der Benutzer direkt zur Startseite zurück: Es wird keine Bildschirmsperre angezeigt, auch wenn eine Tastensperre eingestellt ist (Muster, Code oder was auch immer auf dem Bildschirm der Tastensperre). 
11
Florent Dupont

Ich habe nicht genug Ruf für einen Kommentar, ich möchte nur darauf hinweisen, dass für Geräte mit physischen Tasten (wie Samsung Galaxy Tab A, die von @chairman erwähnt werden) eine Möglichkeit zum Verwalten der erzwungenen Entflechtung Ihrer Anwendung besteht, indem Sie diese in Ihrer DeviceAdminReceiver-Klasse implementieren folgende:

@Override public void onLockTaskModeExiting (Kontext-Kontext, Absicht )

Wenn Ihr Benutzer also die Unpin entfernen möchte, können Sie Ihre App jederzeit neu fixieren;)

3
Paolo Moschini

Hier ist ein Code-Snippet, der Sie zum Laufen bringen sollte:

DevicePolicyManager myDevicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);

if (myDevicePolicyManager.isDeviceOwnerApp(this.getPackageName())) {
    // Device owner
    String[] packages = {this.getPackageName()};
    myDevicePolicyManager.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
    // Not a device owner - Prompt user or show error
}

if (myDevicePolicyManager.isLockTaskPermitted(this.getPackageName())) {
    // Lock allowed
    startLockTask();
} else {
    // Lock not allowed - show error or something useful here
}
0
CzarMatt