Mam aplikację, otrzyma msg z serwera i utworzy okno dialogowe do użytkownika. Tak więc, gdy telefon jest na ekranie blokady, chcę, aby okno dialogowe było wyświetlane na górze ekranu blokady, ale nie możesz go odblokować. Czy ktoś mógłby dać mi sugestię?Android: Jak wyświetlić okno dialogowe lub działanie na ekranie blokady [nie odblokować ekranu]
Odpowiedz
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);
}
W końcu osiągnąłem to samo. Nie podejmuj działań, ponieważ ze względów bezpieczeństwa Android nie wyświetla ekranu blokady za Twoją aktywnością, więc skorzystaj z usługi zamiast z Aktywności.
Poniżej jest mój kod w onStartCommand mojego serwisu
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);
I dodać <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
manifestować
Rozwiązałem coś podobnego w następujący sposób. Utwórz usługi, aby transmitować akcję "ACTION_SCREEN_ON
& ACTION_SCREEN_OFF
", utwórz funkcję, aby wyświetlić okna z numerem WINDOW_SERVICE
. Korzystam z usługi dla moich wymagań, ale ona może się dostosować.
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();
}
}
};
}
Mam nadzieję, że przyda się!
szukałem dokładnego rozwiązania, dzięki gfirem i Unihedro. –
Czy możesz udostępnić fragment_overlay? –
Dzięki! Działa, ale nie z FLAG_DISMISS_KEYGUARD https://stackoverflow.com/a/32233473/4229910 – ashwinx
- 1. Android niestandardowe okno dialogowe
- 2. Jak wyświetlić okno dialogowe Tak/Nie na Androidzie?
- 3. Jak otworzyć okno dialogowe z wpisu tekstowego na ekranie PreferenceScreen?
- 4. opracowywanie aplikacji na ekranie blokady systemu Android
- 5. Jak wyświetlić okno dialogowe z PreferenceFragment?
- 6. Jak oni to robią? Okno dialogowe na ekranie głównym
- 7. Android: pokazujące okno dialogowe postępu
- 8. android - Jak wyświetlić okno dialogowe po zakończeniu aktywności
- 9. C# jak wyświetlić formularz w określonej pozycji myszy na ekranie?
- 10. Jak uzyskać niestandardowe okno dialogowe na dole ekranu w Androidzie
- 11. Android Galaxy S4 - Aktywność widoczna na ekranie blokady
- 12. Jak wyświetlić wbudowane okno dialogowe kopiowania plików?
- 13. Jak wyświetlić niestandardowy UserControl jako okno dialogowe?
- 14. Android: Okno dialogowe/okno dialogowe operacji niespodziewanie znika
- 15. Testowanie systemu Android: jak sprawdzić okno dialogowe jest wyświetlane na ekranie? (używając ActivityInstrumentationTestCase2)
- 16. Okno dialogowe Android asyncTask Koło
- 17. Jak rozpocząć nową aktywność z ekranu blokady?
- 18. Jak wyświetlić okno wiadomości w Android Studio?
- 19. Czasowe okno dialogowe niemodalne
- 20. Jak wyświetlić tylko jedno okno dialogowe na raz?
- 21. Jak wyświetlić okno dialogowe "Windows nie może otworzyć tego pliku"?
- 22. Sposób na podwójne kliknięcie ekranu blokady w Androidzie?
- 23. Otwarte okno dialogowe na środku ekranu, formularze Windows
- 24. Pokaż okno dialogowe/ramka na pełnym ekranie na drugim ekranie śpiewać QT/C++
- 25. jak wyświetlić wyskakujące okienko lub okno dialogowe, gdy telefon jest zablokowany?
- 26. Jak wyświetlić komunikat zajęty na ekranie wpf
- 27. Jak ustawić obraz ekranu blokady Androida?
- 28. ekranu zabić i odblokować mac użyciu Applescript
- 29. Okno dialogowe alertu WP7
- 30. Jak sprawdzić, czy okno dialogowe nie działa w systemie Android?
dziękuję, to zrobiło różnicę dla mnie, Nie używaj aktywności, jeśli chcesz pokazać ją na ekranie blokady i mieć blokadę w tle –
@AdibFara Więc, co używamy? – kadik
@kadik można użyć usługi zamiast, proszę sprawdzić odpowiedź powyżej –