Démarrer votre application au démarrage
la MEILLEURE façon d'y parvenir est de définir votre application comme lanceur
<activity ...
android:launchMode="singleInstance"
android:windowActionBar="false">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Verrouiller votre application
le moyen le plus fiable est d'utiliser un appareil avec Lollipop ou supérieur et d'utiliser
startLockTask
vous devez d'abord définir votre application comme propriétaire de l'appareil. NB votre appareil ne doit pas être provisionné: si vous l'avez enregistré, vous devez effectuer une réinitialisation d'usine et ignorer l'enregistrement du compte.
pour pouvoir enregistrer votre application, vous devez d'abord configurer un composant DeviceAdminReceiver:
package com.example.myapp;
public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
}
@Override
public CharSequence onDisableRequested(Context context, Intent intent) {
return "are you sure?";
}
@Override
public void onDisabled(Context context, Intent intent) {
Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
}
@Override
public void onLockTaskModeExiting(Context context, Intent intent) {
// here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
}
}
une fois que vous avez un appareil non provisionné, vous pouvez lancer la commande suivante à partir d'adb ( pas de racine requise )
adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver
pour éviter qu'android ne demande à l'utilisateur les autorisations d'épingler votre application, vous devez appeler setLockTaskPackages
enfin!
@Override
public void onResume(){
super.onResume();
DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
Context.DEVICE_POLICY_SERVICE);
ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
startLockTask();
}
@Override
public void finish(){
stopLockTask();
super.finish();
}