2016-07-31 1 views
0

비슷한 질문이나 그에 대한 답변을 찾지 못했기 때문에 새로운 것을 게시하기로했습니다.WindowManager를 사용하여 전역 레이아웃에 추가 할 때 VideoView가 비디오를 재생하지 않습니다.

사용자 정의 RelativeLayout을 만들었습니다.이 레이아웃은 내용 레이아웃의 래퍼 역할을합니다.이 레이아웃은 소위 래퍼 초기화 과정에서 부 풀리고 추가됩니다.

비디오 재생을 제외하고 모든 것이 정상적으로 작동하는 것 같습니다. 실제로 비디오가 전혀로드되지 않습니다 (onPrepared는 결코 호출되지 않습니다). 나는 또한 그것과 관련이 있을지도 모르는 오류를 듣기 위해 노력했지만 아무 것도 없었습니다 (OnError는 결코 호출되지 않습니다). 로그에는이 문제와 관련된 정보가 포함되어 있지 않습니다.

ActivityView, Fragments 등에서 VideoView가 제대로 작동하므로 이상한 문제가 있습니다. 그러나 WindowManager를 사용하여 전역 (시스템 전체) 레이아웃에 추가하면 정말 이상하게 보입니다.

전체 (시스템 전체) 레이아웃에서 VideoView로 비디오를 재생할 수 있습니까?

도움이 될 것입니다. 미리 감사드립니다!

코드 조각 :

CustomRelativeLayout

public class CustomRelativeLayout extends RelativeLayout { 


public static final String TAG = "Some Tag"; 


public CustomRelativeLayout(Context context) { 
    super(context); 
    init(); 
} 


//The rest of the constructors 
//go here... 


private void init() { 
    WindowManager windowManager = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 

    View inflatedView = inflater.inflate(R.layout.my_layout, this, false); 

    VideoView videoView = (VideoView) inflatedView.findViewById(R.id.videoView); 
    videoView.setVideoURI(Uri.parse("http://www.html5videoplayer.net/videos/toystory.mp4")); 
    videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mediaPlayer) { 
      Log.e(TAG, "The Video is ready to be played!"); 
      mediaPlayer.start(); 
     } 
    }); 

    //adding the inflated view 
    addView(inflatedView); 

    //adding to the windowManager 
    Point size = new Point(); 
    mWindowManager.getDefaultDisplay().getSize(size); 

    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
     size.x, 
     size.y 
    ); 
    layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; 
    layoutParams.flags = (WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 
    layoutParams.dimAmount = 0f; 
    layoutParams.format = PixelFormat.RGBA_8888; 

    mWindowManager.addView(this, layoutParams); 
} 

}

레이아웃

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

     <VideoView 
      android:id="@+id/videoView" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/black"/> 


</RelativeLayout> 

권한

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
,

답변

0
View inflatedView = inflater.inflate(R.layout.my_layout, this, false); 
    //you should add view i think 
addView(inflatedView); 

VideoView videoView = (VideoView) inflatedView.findViewById(R.id.videoView); 
videoView.setVideoURI(Uri.parse("http://www.html5videoplayer.net/videos/toystory.mp4")); 
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mediaPlayer) { 
     Log.e(TAG, "The Video is ready to be played!"); 
     mediaPlayer.start(); 
    } 
}); 
+0

그러나 팽창 된보기가 추가됩니다. –

관련 문제