当我的设备将方向改为纵向(180度)时,如何收到通知?

时间:2014-02-12 19:29:03

标签: java android android-layout android-orientation android-screen

当我的设备旋转180度时我需要激活一些东西(getRotation()应该返回2)。但是,我读过的帖子只说0度,90度和270度是收到通知的唯一角度。这个设备是否具体? 什么设备返回2?

1 个答案:

答案 0 :(得分:2)

每当您旋转设备时,系统都会调用您的onCreate()方法,因此您可以通过调用活动的onCreate()来找到设备的轮换次数:

getWindowManager().getDefaultDisplay().getRotation();

然而,它不会检测到旋转常数2.根据API,未指定是方向的默认值:

  

默认值。系统选择方向。政策呢   使用,因此在特定环境中做出的选择可能会有所不同   从设备到设备。

我猜测screenOrientation:unspecified不会检测到所有4个角度。从API我们也可以看到几个选项,其中一个是“fullsensor”和api状态:

  

方向由任何设备方向传感器决定   4个方向。这类似于“传感器”,除了这允许   任何4种可能的屏幕方向,无论是什么   设备通常会这样做(例如,某些设备通常不会使用   反向纵向或反向横向,但这使那些)。添加   在API级别9中。

所以要解决此问题,请转到您的清单文件并为您的活动添加屏幕方向,如下所示:

<activity
        android:name="com.example.androidactivitystart.ActivityA"
        android:label="@string/app_name"
        android:screenOrientation="fullSensor" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

现在,当你拨打getWindowManager().getDefaultDisplay().getRotation();时,它会检测所有角度,这是我运行的试验的logCat输出:

  

02-12 19:45:30.065:D / cenas(26085):开始时叫:1

     

02-12 19:45:31.433:D / cenas(26085):开始时叫:0

     

02-12 19:45:32.678:D / cenas(26085):开始时叫:3

     

02-12 19:45:34.356:D / cenas(26085):开始时叫:2

如您所见,检测到所有4个可能的角度。显然不适用于Android版本较低的设备。 9.

如果您需要其他内容,请链接到API:http://developer.android.com/guide/topics/manifest/activity-element.html#screen