web-dev-qa-db-de.com

Android-Aktivität über den Standard-Sperrbildschirm

Wie kann ich eine Activity oder Dialog anzeigen, um auf dem Sperrbildschirm sichtbar zu sein?

Ich habe bereits versucht, meine Sperraktivität anzuzeigen, wenn der Bildschirm aktiviert wird, indem verschiedene Fenstertypen in der Activity.onCreate()-Methode festgelegt werden: 

TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD

und andere zusammen mit den Berechtigungen SYSTEM_ALERT_WINDOW und INTERNAL_SYSTEM_WINDOW.

Meine Aktivität ist sichtbar, nachdem ich das Gerät entsperrt habe.

AKTUALISIEREN:

Ich habe es tatsächlich bereits geschafft, meine eigene Aktivität anstelle des Standard-Sperrbildschirms anzuzeigen. Es funktioniert einwandfrei, wenn Sie nicht die HOME-Taste verwenden.

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);

verwenden Sie diese Flags, um den Sperrbildschirm beim Starten der Aktivität zu deaktivieren.

Nach API Level 17 können Sie verwenden 

<activity
        Android:name=".yourActivityName"
        Android:showOnLockScreen="true"
        Android:screenOrientation="sensorPortrait" >

showOnLockScreen wie im Beispiel ...

114
Enes

Machen Sie keine Aktivität, da Android aus Sicherheitsgründen keinen Sperrbildschirm hinter Ihrer Aktivität anzeigt. Verwenden Sie daher den Dienst anstelle der Aktivität.

Unten ist mein Code in onStartCommand meines Dienstes.

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);

Und <uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" /> zum Manifest hinzufügen

29
Shirish Herwade

Verwenden Sie dies in der onCreate-Methode 

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(......);

Ich hoffe, das wird funktionieren. Danke

19
SarwarCSE

Sie können Code in allen Antworten verwenden, von denen Sie glauben, dass sie funktionieren. Um zu verhindern, dass die Schaltfläche HOME funktioniert, ändern Sie TYPE_SYSTEM_ALERT oder TYPE_SYSTEM_OVERLAY (abhängig davon, was Sie aktuell verwenden) in 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