지금 WallpaperService를 이용해 동영상 라이브배경화면을 만들고 있습니다.
MediaPlayer로 동영상을 플레이 시키는데 갤S단말만 화면이 안보이네요;(소리만 나옴)
아래는 소스이며
VideoSurfaceHolder 클래스는
movie.setDisplay(holder);와 같이 사용하니까 에러가 나서 구글검색으로 집어넣은 코드입니다.
SurfaceHolder 를 제가 잘못 사용해서 그런걸까요?
경험 있으신 분들 조언 부탁드릴게요.
@Override
public void onSurfaceChanged(SurfaceHolder holder, int format, int width, int height) {
super.onSurfaceChanged(holder, format, width, height);
movie = MediaPlayer.create(WallPaper2Activity.this, R.raw.sample_movie);
drawMovie();
}
private void drawMovie() {
final SurfaceHolder holder = getSurfaceHolder();
movie.setDisplay(new VideoSurfaceHolder(holder));
movie.setScreenOnWhilePlaying(true);
movie.setLooping(true); movie.start();
}
public class VideoSurfaceHolder implements SurfaceHolder {
private SurfaceHolder surfaceHolder;
public VideoSurfaceHolder(SurfaceHolder holder) {
surfaceHolder = holder;
}
@Override
public void addCallback(Callback callback) {
surfaceHolder.addCallback(callback);
}
@Override
public Surface getSurface() {
return surfaceHolder.getSurface();
}
@Override
public Rect getSurfaceFrame() {
return surfaceHolder.getSurfaceFrame();
}
@Override
public boolean isCreating() {
return surfaceHolder.isCreating();
}
@Override
public Canvas lockCanvas() {
return surfaceHolder.lockCanvas();
}
@Override
public Canvas lockCanvas(Rect dirty) {
return surfaceHolder.lockCanvas(dirty);
}
@Override
public void removeCallback(Callback callback) {
surfaceHolder.removeCallback(callback);
}
@Override
public void setFixedSize(int width, int height) {
surfaceHolder.setFixedSize(width, height);
}
@Override
public void setFormat(int format) {
surfaceHolder.setFormat(format);
}
@Override
public void setKeepScreenOn(boolean screenOn) {
//Do nothing here, this will prevent an exception
}
@Override
public void setSizeFromLayout() {
surfaceHolder.setSizeFromLayout();
}
@SuppressWarnings("deprecation")
@Override
public void setType(int type) {
surfaceHolder.setType(type);
}
@Override
public void unlockCanvasAndPost(Canvas canvas) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
drawMovie의 getSurfaceHolder(); 가 의심스럽습니다.
onSurfaceChanged 로 holder가 변경되었다고 이벤트가 들어왔는데,
실제 설정하는 홀더의 경우 콜백시 반환되는 holder가 아닌 것을 설정하신 듯 합니다. 콜백시 반환되는 holder를 사용해 보세요.
그리고 onSurfaceChanged 의 경우 화면 사이즈가 변경 되면 불리다보니,
movie 가 계속해서 생길 수 있습니다. movie 를 생성하는 곳을 다른 곳으로 옮기시는것을 권장합니다.