Wie kann ich ein anzeigen Activity
oder Dialog
über dem Sperrbildschirm sichtbar sein?
Ich habe bereits versucht, meine Sperraktivität beim Einschalten des Bildschirms anzuzeigen, indem ich verschiedene Fenstertypen in der folgenden Activity.onCreate()
Methode festgelegt habe:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
und andere zusammen mit SYSTEM_ALERT_WINDOW
und INTERNAL_SYSTEM_WINDOW
Berechtigungen.
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 Standardsperrbildschirms anzuzeigen. Es funktioniert perfekt, es sei denn, Sie verwenden die HOME-Taste.
Antworten:
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);
Versuchen Sie, diese Flags zu verwenden, um den Sperrbildschirm zu deaktivieren, wenn die Aktivität gestartet wird.
Nach API Level 17 können Sie verwenden
<activity android:name=".yourActivityName" android:showOnLockScreen="true" android:screenOrientation="sensorPortrait" >
showOnLockScreen wie im Beispiel ...
quelle
Gehen Sie nicht zur 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ügenquelle
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(......);
Hoffe das wird funktionieren Danke
quelle
Sie können Code in jeder Antwort verwenden, von der Sie glauben, dass sie funktioniert. Um zu verhindern, dass die HOME- Schaltfläche funktioniert, ändern Sie sie
TYPE_SYSTEM_ALERT
oderTYPE_SYSTEM_OVERLAY
(abhängig von Ihrer aktuellen Verwendung) inTYPE_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);
quelle