2012-07-03 7 views
0

동영상을 표시 할 앱을 개발하고있었습니다. BroadCastReceiver는 AC_PPWER_CONNECTED를 수신하고 VideoViewActivity를 시작합니다. 비디오의 소리를들을 수는 있지만 화면이 꺼져 있습니다. 나는 그것을 wahe lock으로 켜고 싶습니다.Android 기기 화면이 켜지지 않습니다.

다음 코드는 작동하지 않습니다.

package org.adem.activities; 

import java.util.ArrayList; 
import org.adem.R; 

import android.app.Activity; 
import android.app.KeyguardManager; 
import android.app.KeyguardManager.KeyguardLock; 
import android.content.Context; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnBufferingUpdateListener; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.media.MediaPlayer.OnVideoSizeChangedListener; 
import android.os.Bundle; 
import android.os.PowerManager; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.Window; 
import android.view.WindowManager; 
import android.widget.Toast; 

public class VideoViewActivity extends Activity implements 
     OnBufferingUpdateListener, OnCompletionListener, 
     OnPreparedListener, OnVideoSizeChangedListener, SurfaceHolder.Callback { 

    private static final String TAG = VideoViewActivity.class.getSimpleName(); 
    private int mVideoWidth; 
    private int mVideoHeight; 
    private MediaPlayer mMediaPlayer; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    private Bundle extras; 
    private boolean mIsVideoSizeKnown = false; 
    private boolean mIsVideoReadyToBePlayed = false; 
    private ArrayList<String> pathList; 
    private int videoQueueSize; 
    private int currentPosition; 
    PowerManager.WakeLock wl; 
    KeyguardLock lock; 

    /** 
    * 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstance) { 
     super.onCreate(savedInstance); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setContentView(R.layout.player); 


     PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
     wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG); 

     KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
     lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 
     lock.disableKeyguard(); 

     mPreview = (SurfaceView) findViewById(R.id.surfaceView); 
     holder = mPreview.getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     extras = getIntent().getExtras(); 
    } 

    private void playVideo() { 

     if ("".equals(pathList.get(currentPosition))) { 
      // Tell the user to provide a media file URL. 
      Toast.makeText(
        VideoViewActivity.this, 
        "Please edit MediaPlayerDemo_Video Activity, " 
        + "and set the path variable to your media file path." 
        + " Your media file must be stored on sdcard.", 
        Toast.LENGTH_LONG).show(); 
      return; 

     } else { 
      try { 

       // Create a new media player and set the listeners 
       releaseMediaPlayer(); 
       mMediaPlayer = new MediaPlayer(); 
       mMediaPlayer.setScreenOnWhilePlaying(true); 
       mMediaPlayer.setDataSource(pathList.get(currentPosition)); 
       mMediaPlayer.setDisplay(holder); 
       mMediaPlayer.prepare(); 
       mMediaPlayer.setOnBufferingUpdateListener(this); 
       mMediaPlayer.setOnCompletionListener(this); 
       mMediaPlayer.setOnPreparedListener(this); 
       mMediaPlayer.setOnVideoSizeChangedListener(this); 
       mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

      } catch (Exception e) { 
       Log.e(TAG, "error: " + e.getMessage(), e); 
      } 
     } 
    } 

    public void onBufferingUpdate(MediaPlayer arg0, int percent) { 
     Log.d(TAG, "onBufferingUpdate percent:" + percent); 

    } 

    public void onCompletion(MediaPlayer arg0) { 
     if (currentPosition >= videoQueueSize) { 
      Toast.makeText(VideoViewActivity.this, "Video Playback finished", Toast.LENGTH_LONG).show(); 
      this.finish(); 
     } else { 
      playVideo(); 
      currentPosition++; 
     } 
     Log.d(TAG, "onCompletion called"); 
    } 

    public void onVideoSizeChanged(MediaPlayer mp, int width, int height) { 
     Log.v(TAG, "onVideoSizeChanged called"); 
     if (width == 0 || height == 0) { 
      Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")"); 
      return; 
     } 
     mIsVideoSizeKnown = true; 
     mVideoWidth = width; 
     mVideoHeight = height; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void onPrepared(MediaPlayer mediaplayer) { 
     Log.d(TAG, "onPrepared called"); 
     mIsVideoReadyToBePlayed = true; 
     if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) { 
      startVideoPlayback(); 
     } 
    } 

    public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) { 
     Log.d(TAG, "surfaceChanged called"); 

    } 

    public void surfaceDestroyed(SurfaceHolder surfaceholder) { 
     Log.d(TAG, "surfaceDestroyed called"); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     Log.d(TAG, "surfaceCreated called"); 
     pathList = extras.getStringArrayList("Path"); 
     currentPosition = 0; 
     videoQueueSize = pathList.size(); 
     if (!wl.isHeld()) { 
      Log.d(TAG, "surfaceCreated - wl.acquire()"); 
      wl.acquire(); 
     } 
     playVideo(); 
     Log.d(TAG, pathList.get(currentPosition)); 
     currentPosition++; 

    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     releaseMediaPlayer(); 
     doCleanUp(); 
    } 

    private void releaseMediaPlayer() { 
     if (mMediaPlayer != null) { 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
    } 

    private void doCleanUp() { 
     mVideoWidth = 0; 
     mVideoHeight = 0; 
     mIsVideoReadyToBePlayed = false; 
     mIsVideoSizeKnown = false; 
     if (wl.isHeld()) { 
      Log.d(TAG, "doCleanUp - wl.release()"); 
      wl.release(); 
     } 
    } 

    private void startVideoPlayback() { 
     Log.v(TAG, "startVideoPlayback"); 
     holder.setFixedSize(mVideoWidth, mVideoHeight); 
     mMediaPlayer.start(); 
    } 
} 

wake lock 명령과 함께 wron은 무엇입니까? 내가 궁금해하는 것은 wl.release가 doCleanUp 메소드의 ent에서 호출되었을 때 화면이 켜지는 것입니다. 도움

답변

1

에 대한

감사 발췌문 이하이 시도 :

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 
powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); 
wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK 
      | PowerManager.ACQUIRE_CAUSES_WAKEUP, "WakeClock"); 
+0

감사합니다, 당신이 내 일을 저장! 여전히 this.getWindow()가 필요합니까? addFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); – AdemC

+0

그래야합니다. – Venky