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