2012-10-22 16 views
3

我創建Android應用播放流媒體直播,我在layout.xml加入videoView並添加使僅佈局土地的Android全屏播放時videoView

我想要的佈局,土地的文件夾該應用程序顯示在僅用於佈局的土地沒有人像視頻全屏

,所以我說下面的代碼中的onCreate():

public void onConfigurationChanged(Configuration newConfig){ 
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE 
    { 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } else 
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    } 
} 

但我的問題是,當我旋轉設備將重新啓動活動,這導致視頻流停止,我想阻止這種情況。所以。我補充說明了這一行

android:configChanges="keyboard|keyboardHidden|orientation|screenSize" 

但這會導致只能執行一次onCreate()的代碼。

如何使我的應用程序連續播放視頻流,並且當我旋轉設備以在佈局區域中製作全屏時,然後在回到肖像時使其正常?

希望任何人都明白我的意思。 在此先感謝。

+0

如何ü解決您的問題?低於api level19 – Erum

回答

9

您應該添加您的videoview(或內容母公司)爲您的佈局文件最後一個元素。並使用下一個代碼:

private RelativeLayout.LayoutParams paramsNotFullscreen; //if you're using RelativeLatout   

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 


    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) //To fullscreen 
    { 
     paramsNotFullscreen=(RelativeLayout.LayoutParams)mVideoView.getLayoutParams(); 
     RelativeLayout.LayoutParams params=new LayoutParams(paramsNotFullscreen); 
     params.setMargins(0, 0, 0, 0); 
     params.height=ViewGroup.LayoutParams.MATCH_PARENT; 
     params.width=ViewGroup.LayoutParams.MATCH_PARENT; 
     params.addRule(RelativeLayout.CENTER_IN_PARENT); 
     mVideoView.setLayoutParams(params); 

    } 
    else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    { 
     mVideoView.setLayoutParams(paramsNotFullscreen); 
    } 
} 

它獲取videoview layoutparams的副本並將其保存在全局變量中。然後用先前的值創建一個新的layoutparams對象,但現在將限制設置爲match_parent並將其設置在您的視頻視圖中。你現在的視頻採用全屏模式。當您縱向放置設備時,paramsNotFullscreen會恢復以前的值。

UPDATE:

在您的清單文件必須添加到活動聲明下面的代碼,以避免活動重新啓動:

android:configChanges="screenLayout|screenSize|orientation" 
+1

通話需要API等級19 –

+0

@OmidOmidi我在2.3+中測試了此代碼。無論如何,我在2012年發佈這個答案時,KitKat還沒有發佈 – ClarkXP

+0

@ClarkXP這個代碼我不會需要佈局文件?我將如何做到這一點我的視頻xm佈局在這裏附上http://pastie.org/10423424 – Erum

1

試試這個...

@Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 


     if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
     { 
      setContentView(R.layout.create_job_l); 

     } 
     else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
     { 
      setContentView(R.layout.create_job_p); 

     } 
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 

     super.onCreate(savedInstanceState); 
     if (getResources().getConfiguration().orientation == 1) 
     { 
      setContentView(R.layout.create_job_p); 
     } 
     if (getResources().getConfiguration().orientation == 2) 
     { 
      setContentView(R.layout.create_job_l); 
     } 


    } 
+0

這使得應用程序永久landScape,這不是我的目標,我想既landScape和肖像,但只做landScape全屏幕。 – user1553381

+0

編輯完代碼後,這是否會影響視頻流?因爲當我旋轉 – user1553381

+0

時,我不允許應用程序重新啓動活動,所以您必須在另一個類中定義靜態videoView1,然後在更改方向時必須將當前videoView對象設置爲靜態videoView1 ......時重新啓動活動時您必須將靜態videoView1分配到當前videoView .. –