Ho un'app, riceverà msg dal server e creerà una finestra di dialogo all'utente.Quindi, quando il telefono è in schermata di blocco, desidero che venga visualizzata la finestra di dialogo sulla parte superiore della schermata di blocco, ma non sbloccarlo. nessuno può darmi suggerimenti?Android: come visualizzare la finestra di dialogo o l'attività sulla schermata di blocco [non sbloccare lo schermo]
risposta
public void onAttachedToWindow() {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
Finalmente ho raggiunto lo stesso. Non andare per attività, perché Android non mostrerà schermata di blocco dietro l'attività per motivi di sicurezza, quindi utilizzare il servizio anziché Attività.
Qui di seguito è il mio codice in onStartCommand del mio servizio
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);
e aggiungere <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
manifestare
ho risolto qualcosa di simile nel modo seguente. Creare servizi, per trasmettere l'azione "ACTION_SCREEN_ON
& ACTION_USER_PRESENT
& ACTION_SCREEN_OFF
", creare la funzione per mostrare le finestre con WINDOW_SERVICE
. Uso un servizio per le mie esigenze, ma può adattarsi.
public class OverlayService extends Service {
private static final String TAG = OverlayService.class.getSimpleName();
WindowManager mWindowManager;
View mView;
Animation mAnimation;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
registerOverlayReceiver();
return super.onStartCommand(intent, flags, startId);
}
private void showDialog(String aTitle){
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mView = View.inflate(getApplicationContext(), R.layout.fragment_overlay, null);
mView.setTag(TAG);
int top = getApplicationContext().getResources().getDisplayMetrics().heightPixels/2;
RelativeLayout dialog = (RelativeLayout) mView.findViewById(R.id.dialog);
LayoutParams lp = (LayoutParams) dialog.getLayoutParams();
lp.topMargin = top;
lp.bottomMargin = top;
mView.setLayoutParams(lp);
ImageButton imageButton = (ImageButton) mView.findViewById(R.id.close);
lp = (LayoutParams) imageButton.getLayoutParams();
lp.topMargin = top - 58;
imageButton.setLayoutParams(lp);
imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mView.setVisibility(View.INVISIBLE);
}
});
TextView title = (TextView) mView.findViewById(R.id.Title);
title.setText(aTitle);
final WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
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);
mView.setVisibility(View.VISIBLE);
mAnimation = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.in);
mView.startAnimation(mAnimation);
mWindowManager.addView(mView, mLayoutParams);
}
private void hideDialog(){
if(mView != null && mWindowManager != null){
mWindowManager.removeView(mView);
mView = null;
}
}
@Override
public void onDestroy() {
unregisterOverlayReceiver();
super.onDestroy();
}
private void registerOverlayReceiver() {
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
registerReceiver(overlayReceiver, filter);
}
private void unregisterOverlayReceiver() {
hideDialog();
unregisterReceiver(overlayReceiver);
}
private BroadcastReceiver overlayReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(TAG, "[onReceive]" + action);
if (action.equals(Intent.ACTION_SCREEN_ON)) {
showDialog("Esto es una prueba y se levanto desde");
}
else if (action.equals(Intent.ACTION_USER_PRESENT)) {
hideDialog();
}
else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
hideDialog();
}
}
};
}
Spero sia utile!
stavo cercando la soluzione esatta, grazie gfirem e Unihedro. –
Puoi condividere fragment_overlay? –
Grazie! Funziona ma non con FLAG_DISMISS_KEYGUARD https://stackoverflow.com/a/32233473/4229910 – ashwinx
- 1. Android, come creare una schermata iniziale o una schermata di avvio senza lo schermo bianco?
- 2. Come rendere la nostra schermata di blocco in Android invece della schermata di blocco predefinita
- 3. Come visualizzare la finestra di dialogo di avanzamento in Android?
- 4. Finestra di dialogo popup nella schermata iniziale di Android
- 5. Come avviare una finestra di dialogo (come allarme dimiss/snooze) che può essere cliccato senza sbloccare lo schermo
- 6. Visualizzazione delle informazioni personalizzate sulla schermata di blocco in Android
- 7. Finestra di dialogo Avanzamento posizionamento Android o Finestra di dialogo Avanzamento personalizzato
- 8. IME per Android: come visualizzare una finestra di dialogo popup?
- 9. Come richiamare il plugin di autorizzazione Mac per sbloccare la schermata di blocco dopo lo screen saver?
- 10. Come impostare l'immagine schermata di blocco Android
- 11. Finestra di dialogo testo di input Android
- 12. Come avviare una nuova attività dalla schermata di blocco?
- 13. Finestra di dialogo frammento schermo intero di Android Bug
- 14. Modifica della posizione della finestra di dialogo sullo schermo Android
- 15. Android: la finestra di dialogo di avanzamento non gira spinning
- 16. Larghezza finestra di dialogo Android
- 17. interrupt schermata di blocco NSURLConnection
- 18. Finestra di dialogo di avanzamento modale di blocco non bloccante
- 19. Crea attività Android come finestra di dialogo
- 20. sviluppo di un'applicazione schermata di blocco Android
- 21. Finestra di dialogo di avanzamento di Android
- 22. Lollipop widget schermata di blocco Android
- 23. Come posso visualizzare la finestra di dialogo jquery test unitario?
- 24. android - Come mostrare la finestra di dialogo al termine dell'attività
- 25. Android come mostrare la notifica sullo schermo
- 26. Android Facebook schermata di blocco notifica
- 27. Android - Controlla la connessione a Internet e visualizza la finestra di dialogo se non connesso
- 28. Chiudi finestra di dialogo sulla pagina web
- 29. Origine della schermata di blocco di Android
- 30. Come localizzare i pulsanti sulla finestra di dialogo modale JQueryUI
grazie, questo ha fatto la differenza per me, non utilizzare l'attività se si vuole mostrarlo su lockscreen e avere la schermata di blocco sullo sfondo –
@AdibFara Quindi, che shoul usiamo? – kadik
@kadik è possibile utilizzare il servizio, si prega di verificare la risposta sopra –