2013-04-22 12 views
5

Pracuję nad projektem, który powinien pokazać małą prezentację na wyświetlaczu dodatkowym (API 4.2). Do tej pory wszystko działa dobrze. Ale jeśli zamknę aplikację, nie mogę zapobiec zamknięciu prezentacji. Chciałbym stworzyć aplikację, która uruchamia usługę w tle, która inicjuje prezentację. Aby użytkownik zobaczył ikonę powiadomienia na pasku stanu, ale usługa przesyła strumieniowo zawartość do dodatkowego ekranu.Wyłączanie ukrywania prezentacji (ekran dodatkowy)

Wszelkie pomysły, jeśli można to zrealizować? Próbowałem go w tle, ale nie wiem, z jakiego kontekstu powinienem skorzystać. Próbowaliśmy go

getApplicationContext() 

ale potem po prostu wyjątek:

Unable to add window -- token null is not for an application 

Jeśli mogę użyć statycznej metody takie jak getAppContext() (znam taką brzydką siekać) pokaże prezentację, ale także ukryć jeśli zamknę aplikację.

Wszelkie pomysły?

+0

świetne pytanie! Próbuję zrobić to samo bez powodzenia! – zaxy78

Odpowiedz

7

stworzenie serwisu, który używa Context.createDisplayContext (wyświetlacz), aby otrzymać nowy menedżer okien dla drugiego wyświetlacza - w ten sposób Prezentacja działa

spojrzeć na ten link jako przykład: http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/com/android/server/LoadAverageService.java.htm

W onCreate() zamiast się WindowManagerImpl:

public void onCreate(){ 
    ... 
    WindowManagerImpl wm = (WindowManagerImpl)getSystemService(WINDOW_SERVICE); 
    wm.addView(mView, params); 
} 

wywołać metodę jak ta:

private void addView(WindowManager.LayoutParams params){ 
    DisplayManager dm = (DisplayManager) getApplicationContext().getSystemService(DISPLAY_SERVICE); 
    if (dm != null){ 
     Display dispArray[] = dm.getDisplays(); 

     if (dispArray.length>0){ 
      Context displayContext = getApplicationContext().createDisplayContext(dispArray[1]); 
      WindowManager wm = (WindowManager)displayContext.getSystemService(WINDOW_SERVICE); 
      wm.addView(mView, params); 
     } 
    } 
} 

Twój widok zostanie dodany do ekranu dodatkowego i od tego prowadzi przez służbę, swoją działalność działa na głównym ekranie nie zostanie wstrzymane

+1

Co używasz dla swojego 'type' w swoim' WindowManager.LayoutParams'? 'TYPE_APPLICATION' i krewni wysadzają w powietrze błędy związane z brakującym' tokenem'. Zobacz https://stackoverflow.com/questions/22560241/how-to-set-up-a-window-on-an-external-display-from-a-service, by dowiedzieć się więcej. Dzięki! – CommonsWare

+3

Aktualizacja linku: https://android.googlesource.com/platform/frameworks/base/+/eclair-release/services/java/com/android/server/LoadAverageService.java –

5

Wszelkie pomysły, jeśli można to zrealizować?

Od Presentation jest podklasą Dialog Twój Presentation mogą być widoczne tylko gdy masz działalność hostingową go na pierwszym planie.


UPDATE

prace odpowiedź icarmel, choć nie brakuje niektórych szczegółów. Mam teraz PresentationService teraz w my CWAC-Presentation library, który oferuje pełną działającą implementację tej techniki. Aby odpowiedzieć na moje pytanie w moim komentarzu do odpowiedzi icarmel, używasz WindowManager.LayoutParams.TYPE_SYSTEM_ALERT w WindowManager.LayoutParams, co z kolei wymaga uprawnienia SYSTEM_ALERT_WINDOW (niestety).

+0

OK dziękuję. Ale czy masz pojęcie, jak mogę pokazać prezentację, jeśli ekran jest wyłączony? To naprawdę dziwne, że prezentacja wyłącza się, gdy wyłączam wyświetlacz. Dziwny przypadek użycia, jeśli siedzę na kanapie, przesyłając kilka filmów z mirracastem, a telewizor znika na czarno, ponieważ wyświetlacz smartfona wyłącza się ... – mkl

+0

@mkl: "Ale czy masz pojęcie, jak mogę pokazać prezentację? czy ekran jest wyłączony?"- Będę nieco zaskoczony, jeśli to możliwe, i na pewno nie wiem, jak można to zrobić." Dziwny przypadek użycia, jeśli siedzę na kanapie, przesyłając kilka filmów z mirracastem, a telewizor zaniknie na czarno ponieważ wyświetlacz smartfona wyłącza się "- włącz ekran, używając" android: keepScreenOn = "true" '. – CommonsWare

+0

Tak, myślałem, że musi być takie rozwiązanie (przykład: youtube). Ale to jest brzydkie :(google utworzyłoby potężniejszy interfejs API, myślę, że muszę to zrobić tak, jak wspomniałeś i spróbować zmniejszyć jasność wyświetlacza i pokazać czarny prostokąt, który pozwoli oszczędzać energię na wyświetlaczach AMOLED Dziękujemy! – mkl

Powiązane problemy