Je suis assez nouveau pour Android et je développe actuellement une application Android qui devrait fonctionner en mode Kiosque, de sorte qu'un utilisateur normal ne peut pas quitter l'application ou faire quoi que ce soit en dehors de cela.
Ce que je l'ai déjà fait:Mode Kiosque Android - Empêcher les utilisateurs de "désautoriser" désancrer l'application
- Je mis mon application comme un périphérique propriétaire
- I "pin écran" l'application dans le onCreate() - méthode dans le MainActivity en tant que propriétaire de l'appareil
- Je un bouton dans le MainActivity qui plus tard permet à un administrateur de quitter en entrant un mot de passe. Appels stopLockTask()
Le problème que je rencontrais maintenant, que tout utilisateur peut quitter l'écran épinglage simplement une pression longue sur « retour » et « multi-tâches » boutons en même temps, parce que la tablette sur laquelle l'application devrait fonctionner a hardwarebuttons que je ne peux pas simplement désactiver. (au moins je ne sais pas comment faire cela sans enraciner l'appareil)
Alors est-il possible de désactiver cette combinaison de touches pour quitter l'épinglage de l'écran, ou une solution de contournement? Une approche que je pensais était de repinning l'application dans ma classe AdminReceiver dans le onLockTaskModeExiting(), mais je suis toujours bloqué sur la façon de le faire.
Voici quelques extraits de code de mon MainActivity et la classe 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();
}
});}
Toute aide est très appréciée. Merci!
Comment définissez-vous votre application en tant que périphérique propriétaire? Si votre application est définie en tant que propriétaire du périphérique, le bouton récent sera également masqué. Voir l'exemple DPC pour plus d'informations. – bmg
@Phil, oui comment avez-vous défini propriétaire du périphérique? – portfoliobuilder