web-dev-qa-db-fra.com

Activité Android sur l'écran de verrouillage par défaut

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.

67
plugmind
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 ...

114
Enes

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

29
Shirish Herwade

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.

19
SarwarCSE

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);
0
A. N