Pytanie Blokada ekranu jest wyświetlana między czynnościami


Pracuję nad aplikacją kiosku, która może uruchamiać inne aplikacje na Androida. Działa na górze ekranu blokady. Problemem, który widzę, jest to, że ekran blokady jest wyświetlany krótko pomiędzy działaniami. Musimy zablokować tablet, aby odblokowanie nie było możliwe.

Udało mi się to odtworzyć w bardzo prostym przypadku. Obie czynności są prawie identyczne. Aplikacja jest administratorem urządzenia i może być wyświetlana nad klawiaturą. Próbowałem również nie używać finish() w ogóle, ale to nie rozwiązało problemu.

public class MainActivity extends Activity {

    private Handler h = new Handler();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button bneg1 = (Button) findViewById(R.id.bneg1);
        bneg1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                h.post(new Runnable() {
                    @Override
                    public void run() {
                        Intent i = new Intent(MainActivity.this, SecondActivity.class);
                        startActivity(i);
                        finish();
                    }
                });
            }
        });
    }
}

Jak mogę uruchomić inne działanie bez pokazywania na krótko najpierw ekranu blokady?


11
2018-03-13 20:07


pochodzenie


Czy próbowałeś FLAG_ACTIVITY_NO_ANIMATION, z overridePendingTransition (0, 0) po uruchomActivity (). Dzięki temu nowe działania są "wsuwane", a zamiast tego po prostu uruchamiają je natychmiast. nie jestem pewien, czy to jest poprawka, ale warto się jej przyjrzeć. - zgc7009
Próbowałem tego. Wyglądało na to, że nie robi żadnej różnicy. - Randy


Odpowiedzi:


Jak mogę uruchomić inne działanie bez krótkiego pokazywania   najpierw ekran blokady?

Łatwiejszym sposobem na osiągnięcie tego byłoby posiadanie zwyczajnego działania (zwykłego widoku) przed uruchomieniem activity-1. W ten sposób, gdy skończysz activity-1, dummy-activity przejmie, a następnie activity-2 wchodzenie na pierwszy plan.

Będziesz (najprawdopodobniej) musiał również powiedzieć systemowi, aby nie wyświetlał animacji okna. Zrób to, dodając to do swojego motywu aplikacji:

<item name="android:windowAnimationStyle">@null</item>

4
2018-03-16 06:43



To może zadziałać. Opowiem o moich odkryciach. - Randy
Tak naprawdę nie testowałem tego jednak: na podstawie poprzednich testów to nie zadziała. Całkowicie usunąłem finish() z obu działań. Spowodowałoby to ten sam efekt, co działanie obojętne, ponieważ nadal miałbym aktywność w stosie. Blokada nadal pokazywałaby się na krótko. - Randy
@Randy Zasugerowałem to podejście bez próbowania go z pierwszej ręki. Przeprosiny. To nie działa. Co jeszcze próbowałem: pokazując ekran o rozmiarze PopupWindow TYPE_TOAST przed uruchomieniem działania-2 (odrzucenie go zaraz po) - nie działa. Dodanie rozmiaru nieprzezroczystego o rozmiarze ekranu przy użyciu menedżera okien addView(...) z ustawieniem TYPE_SYSTEM_ALERT - nie działa. - Vikram
@Randy Co zrobił praca była używana Fragments zamiast Activities. Ponieważ nigdy nie opuszczasz aktywności podczas używania fragmentów, ekran blokady nie przeszkadza - nawet krótko. Rozumiem, że przejście od działań do fragmentów nie jest prostą decyzją (dla dowolnej aplikacji skalującej). Ale możesz rozważyć zrobienie tego w ostateczności - na wypadek, gdyby nic innego się nie pojawiło. - Vikram
@Randy Zastanawiasz się, czy ekran blokady pokazuje się, kiedy nie rób tego ustaw a secure blokada (jak blokada wzoru itp.)? Jeśli to nie robiprawdopodobnie możesz ustawić niezabezpieczony mechanizm odblokowania, jak slide-lock i zadeklaruj swoją aplikację jako aplikację na ekranie głównym: za pomocą category.HOME i category.DEFAULT jako filtry intentowe. W ten sposób ograniczysz dostęp użytkownika do domyślnego programu uruchamiającego Androida - co zgaduję jestcel bezpiecznego zamka. - Vikram