2016-04-26 39 views
2

我正在制作应用程序/游戏,应该在多人模式下在portraitreversePortrait之间切换。 (主要是因为每个玩家都可能在他/她的转盘上使用键盘,而设备固定在它们之间的桌子上。)Android:即使设备自动旋转屏幕关闭,如何强制反向纵向定位?

我的应用程序在自动旋转开启时工作正常..但是reversePortrait方向永远不可实现当设备自动旋转关闭时!

我做什么到目前为止,我已经设置在Manifest文件的方向:在需要时通过调用此方法

<activity 
    android:name=".MainActivity" 
    android:configChanges="orientation|keyboardHidden" 
    android:screenOrientation="portrait"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

然后我编程改变方向运行时:

public void rotateScreen(boolean reverse){  
    if (reverse) { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 
    } 
    else{ 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 
} 

但是,如果设备自动旋转关闭,那么仍然不会强制为reversePortrait方向。

我也尝试了方法,但它没有工作。我认为它只是在改变方向之后才被调用,而不是之前!

我甚至在Manifest文件中试过screenOrientation="reversePortrait",但即使在自动旋转关闭的情况下,它也是无效的。

+0

你可以在你的'rotateScreenMethod()'中添加一个检查,以便它检查'Settings.System.ACCELEROMETER_ROTATION',并且如果它没有设置。有关更多信息,请参阅此答案:http://stackoverflow.com/a/4909079/2891462。 – user2891462

回答

0

经过大量研发什么更多的细节,似乎覆盖设备锁定方位和屏幕设置为一个反向纵向的唯一方法是强制启用该设备自动-rotate。

第一,必须在清单文件的代码上方添加此权限:

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

然后,定义一样,在MainActivity东西:

public boolean enableAutoRotate(){ 

     boolean isAutoRotate = android.provider.Settings.System 
       .getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1) == 1; 

     if (!isAutoRotate){ 
      try { 
       android.provider.Settings.System 
         .putInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1); 

      } catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 

     isAutoRotate = android.provider.Settings.System 
       .getInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION, 1) == 1; 

     return isAutoRotate; 
} 

try和catch重要的是要防止如果用户没有授予或删除权限,应用程序将崩溃。

public void rotateScreen(boolean reverse){ 

     if (enableAutoRotate()){ 
      if (reverse) { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); 

      } 

      else { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

      } 
     } 
    } 

rotateScreen方法也可以布尔而不是无效的,如果需要的话:

然后,使用这样的事情需要时设置的方向。

0

我不知道你到底想要达到什么目的。打电话给你的方法OnConfigurationChanged

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

但在这里,一旦首批推出的屏幕反转,但你可以将此按您的要求。

请提供您想才达到

+0

我也尝试过这种方法...它没有工作..我认为它从来没有被称为当设备自动旋转关闭...我想实现的是能够设置屏幕旋转以反向纵向甚至如果设备自动旋转关闭。 –

+0

你想要达到什么目的? – MobDev

+0

我想要实现这一点:即使设备自动旋转关闭,也可以将屏幕旋转设置为反转纵向。 –

相关问题