2017-06-18 24 views
-1

我有一個活動,我從哪裏開始了一項服務。該服務以橫向模式顯示佈局。我的問題是,如果服務在橫向模式下顯示任何內容,則活動也會進入橫向模式,如果服務佈局進入縱向模式,則活動佈局也會進入縱向模式。我只是想停止活動進入風景模式,而服務正在做一些風景模式的東西。我只想保留縱向模式下的活動。我已經嘗試通過清單,但沒有運氣。有沒有解決方法?服務中的方向更改

+0

「服務顯示在橫向模式下的佈局」 - 你不妨詳細解釋你這個意思,如通過[MCVE] 。 – CommonsWare

回答

0

您不需要擔心服務。

如果你想保持視圖永久特定活動,則

在清單中,設置此爲您的活動的地方開始服務

<activity android:name=".YourActivity" 
android:configChanges="orientation" 
android:screenOrientation="landscape"/> // or portrait 

或 有條件的情況(臨時),你可以做

if(isServiceStarted){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

} 
if(isServiceEnded){ 
//flip to original view 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

我希望它能爲你工作。

更新答

當朝向改變方向的 生命週期,會發生什麼

onPause(); 
onSaveInstanceState(); 
onStop(); 
onDestroy(); 

onCreate(); 
onStart(); 
onResume(); 

使2種方法

void changeToLandscape(){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} 
void changeToPro(){ 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

現在當你要旋轉視圖

onCreate(){ 
// start service here and rotate view 
    changeToLandscape(); 
} 

那麼它會去的onResume()

void onResume(){ 
    super(); 
    if(isServiceOn){ 
     changeToLandscape() 
    } 
    else{ 
    changeToPro() 
    } 
} 
void onPause(){ 
     super(); 
     if(isServiceOn){ 
      changeToLandscape() 
     } 
     else{ 
     changeToPro() 
     } 
    } 
+0

Handler h; Runnable r; public void orien(){ h = new Handler(); (){ r = new Runnable(){ @Override public void run(){ if(fullscreen)setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); h.postDelayed(r,1); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); h.postDelayed(r,1); } } }; h.post(r); } –

+0

嘗試使用此處理程序,但仍然無法正常工作。感謝您的回覆 –

+0

服務將視圖設置爲橫向狀態時,該活動也轉到橫向狀態。服務關閉後,它立即返回到portrait.the問題是爲什麼活動進入土地。在的onResume( –

0

服務沒有任何layout或UI。從Android doc

一個服務瞭解了服務的基礎知識是可以執行長時間運行在後臺 操作的應用組件,它不向用戶提供 接口。另一個應用程序組件可以啓動服務,並且即使用戶切換到另一個應用程序,它也會繼續在後臺運行。此外,組件可綁定到服務 以與其交互,甚至執行進程間通信(IPC)。例如,服務可以處理網絡交易,播放音樂,執行文件I/O或與內容提供商交互,全部來自 背景。

你可能有2個活動,並控制方向有噸的SO線程已經喜歡: - Android - disable landscape mode?
How do I disable orientation change on Android?

+0

是的,你是正確的服務沒有ui.but但我使用窗口管理器來顯示從xml.so四捨五入膨脹起來的視圖,我有一個活動和一個service.i想修復活動的方向肖像,但是whn該服務轉到橫向模式活動視圖也轉到橫向模式。通過使用,但沒有運氣 –

+0

服務將景觀視爲景觀的那一刻,景物也會流向景觀。服務關閉後,景物即會回到肖像。問題就是活動落地的原因。 –

0

服務在後臺長時間運行的操作執行。它沒有用戶界面。