2017-06-18 25 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

服务在后台长时间运行的操作执行。它没有用户界面。