在使用中改变方向

时间:2017-06-18 19:00:48

标签: java android

我有一个我已经开始服务的活动。该服务以横向模式显示布局。我的问题是,如果服务以横向模式显示任何内容,活动也会进入横向模式,如果服务布局进入纵向模式,活动布局也会进入纵向模式。我只是想停止活动进入横向模式,而服务在横向模式下做一些事情。我只想在纵向模式下保留活动。我试过通过清单,但没有运气。有没有解决方案?

3 个答案:

答案 0 :(得分:0)

服务没有任何layout或用户界面。阅读Android doc

中的服务基础知识
  

服务是一个可以执行长时间运行的应用程序组件   在后台运行,它不提供用户   接口。另一个应用程序组件可以启动服务   即使用户切换到后台,也会继续在后台运行   另一个应用。此外,组件可以绑定到服务   与它交互甚至执行进程间通信(IPC)。   例如,服务可以处理网络事务,播放音乐,   从中执行文件I / O或与内容提供商进行交互   背景

你可能有2个活动并且为了控制方向,有很多SO线程已经像: - Android - disable landscape mode?
How do I disable orientation change on Android?

答案 1 :(得分:0)

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

答案 2 :(得分: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);
}

我希望它对你有用。

更新了Ans

方向改变时会发生什么 定向生命周期

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()
       }
    }