Styra screenens av/på

Diskussion i 'Frågor, support och diskussion' startad av chrotto, 28 sept 2011.

  1. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Har svårt att hitta en bra lösning på följande problem:
    Bygger en app där en aktivitet är att via mediaspelaren spela upp en text samtidigt som ett bildspel rullar. Eftersom det inte är någon användarinput slocknar skärmen efter en stund. Detta har jag hanterat via:
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

    Om användaren aktivt återgår till föregående screen så ätergår skärmen i normalt läge. Jag skulle dock vilja göra denna återföring i koden efter att ljudfilen har nått slutet. Har inte lyckats hitta ett bra sätt att hantera detta.
    Använder denna sekvens för att spela upp ljudfilen:

    private void playAudio(Integer media) {
    try {
    mMediaPlayer = MediaPlayer.create(SpelaUpp.this, media);
    mMediaPlayer.start();
    } catch (Exception e) {
    Log.e(TAG, "error: " + e.getMessage(), e);

    }

    }

    Tacksam för tips
    /Christer
     
  2. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

  3. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Tack,
    Har testat detta men förmodligen missat nåt. Skärmsläckaren går fortfarande igång.
    Fick lägga till:
    uses-permission android:name="android.permission.WAKE_LOCK"
    I Manifest-filen för att få igenom koden.
    Koden hare jag lagt inuti den funktion jag anropar när mediaspelaren skall dra igång. Ser inga fel när den körs, men skärmsläckaren är fortfarande aktiv.

    private void playAudio(Integer media) {
    PowerManager pm = (PowerManager) getSystemService(SpelaUpp.POWER_SERVICE);
    PowerManager.WakeLock wl = pm.newWakeLock(
    PowerManager.SCREEN_DIM_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE,TAG);
    wl.acquire();

    try {
    mMediaPlayer = MediaPlayer.create(SpelaUpp.this, media);
    mMediaPlayer.start();
    } catch (Exception e) {
    Log.e(TAG, "error: " + e.getMessage(), e);

    }
    wl.release();
    }
     
  4. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

    Nu släpper du låset direkt efter att du startat mediaspelaren vilket ju inte gör så stor nytta.
     
  5. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Verkar så. Vill ju att den gäller till uppspelningen är slut. Har dock inte kunna lista ut hur man kan fixa det.
    /Christer
     
  6. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 448
    Mottagna gillanden:
    2 199

    MINA ENHETER

    Använd onCompletionListener? MediaPlayer.OnCompletionListener | Android Developers

    Givetvis ska du släppa den om användaren går ur din app eller dödar din app också.
     
  7. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Egentligen skall en annan aktivitet starta när ljudfilen är färdig.
    Borde därför kunna använda getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    för den Activitet som spelar upp ljudet och sedan starta nästa activitet vid rätt tillfälle med hjälp av onCompletionListener(). Har gjort några försök med detta utan att lyckas.
    Måste erkänna att jag inte har koll på hur man skall använda metoden.
    Kan du ge mig en hint?

    /Christer
     
  8. chrotto

    chrotto Baby Droid Medlem

    Blev medlem:
    5 jul 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Har löst problemet genom att i den anropande activiteten använda:
    startActivityForResult(intent, ACTIVITY_CREATE);

    och sedan lägga in

    mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer arg0) {
    finish();

    i playAudio.

    private void playAudio(Integer media) {
    try {
    mMediaPlayer = MediaPlayer.create(SpelaSaga.this, media);
    mMediaPlayer.start();

    } catch (Exception e) {
    Log.e(TAG, "error: " + e.getMessage(), e);
    }
    mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer arg0) {
    finish();
    }
    });

    }