Comment puis-je afficher une Activity
ou Dialog
visible sur l'écran de verrouillage?
J'ai déjà essayé d'afficher mon activité de verrouillage lorsque l'écran est activé en définissant différents types de fenêtre dans la méthode Activity.onCreate()
:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
et d'autres avec les autorisations SYSTEM_ALERT_WINDOW
et INTERNAL_SYSTEM_WINDOW
.
Mon activité est visible après le déverrouillage de l'appareil.
METTRE À JOUR:
En fait, j'ai déjà réussi à afficher ma propre activité au lieu de l'écran de verrouillage par défaut. Cela fonctionne parfaitement sauf si vous utilisez le bouton HOME.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
essayez d’utiliser ces indicateurs pour désactiver le verrouillage de l’écran au démarrage de l’activité.
Après le niveau 17 de l’API, vous pouvez utiliser
<activity
Android:name=".yourActivityName"
Android:showOnLockScreen="true"
Android:screenOrientation="sensorPortrait" >
showOnLockScreen comme dans l'exemple ...
Ne partez pas pour une activité, car Android n'affichera pas l'écran de verrouillage derrière votre activité pour des raisons de sécurité. Utilisez donc le service plutôt que l'activité.
Ci-dessous, mon code dans onStartCommand de mon service.
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
Et ajoutez <uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
au manifeste
Utiliser ceci dans la méthode onCreate
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// This line should be before setContentView..
setContentView(......);
J'espère que cela fonctionnera. Merci.
Vous pouvez utiliser le code dans n'importe laquelle des réponses que vous pensez que cela fonctionne. Ensuite, pour empêcher le boutonHOMEde fonctionner, changez TYPE_SYSTEM_ALERT
ou TYPE_SYSTEM_OVERLAY
(selon ce que vous utilisez actuellement) en TYPE_SYSTEM_ERROR
:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);