检查Android中的设备方向

时间:2012-09-02 07:23:43

标签: android orientation

我想在不改变当前活动方向的情况下,在设备的方向更改上创建新活动。有没有办法做到这一点?

其他信息:

我的应用程序默认方向是Portrate。当设备处于横向时,我必须打开第二个活动。但第一项活动应该是Portrate

5 个答案:

答案 0 :(得分:2)

您可以在android:screenOrienttation="Landscape/Portrate"中使用AndroidMenifest.xml作为特定活动。因此剩下的活动将保留在默认视图中,当您进行维护时,修正活动将强制显示在特定视图中。< / p>

希望这对你有所帮助。

答案 1 :(得分:2)

当然可以。您只需在清单中声明您的第一个活动将处理方向更改。然后添加一个启动第二个活动的onConfigurationChanged函数。

答案 2 :(得分:1)

写在清单

第一个活动的

  <activity  android:name="firstActivity" android:screenOrientation="portrait"></activity>
第二个活动

   <activity  android:name="secondActivity" android:screenOrientation="landscape"></activity>

答案 3 :(得分:1)

您还可以以编程方式检测活动的当前方向,并在设备处于横向模式时对第二个活动运行意图。这是一个完成它的代码:

WindowManager wm = getWindowManager();
Display d = wm.getDefaultDisplay();
if(d.getWidth() > d.getHeight())
{
    // landscape mode
    Intent i = new Intent(FirstActivity.this, SecondActivity.class);
    startActivity(i);
}

答案 4 :(得分:0)

感谢大家的帮助。最后,我使用SensorEventListener完成了此操作。

<强>的OnCreate()

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

<强>监听

    private SensorEventListener mySensorEventListener = new SensorEventListener() {

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    public void onSensorChanged(SensorEvent event) {
        // angle between the magnetic north directio
        // 0=North, 90=East, 180=South, 270=West
        float azimuth = event.values[1];
        // compassView.updateData(azimuth);

        if ((azimuth < 100 && azimuth > 60)
                || (azimuth > -100 && azimuth < -60)) {
            if (EasterVal != 0) {
                if (!Modules.LoanType.equalsIgnoreCase("Ballcash")) {
                    Intent in = new Intent(Buyeroutput.this, Esteregg.class);
                    startActivity(in);
                    EasterVal = 0;
                }
            }
        } else {
            EasterVal = 1;
        }
    }
};

protected void onDestroy() {
    super.onDestroy();
    if (sensor != null) {
        sensorManager.unregisterListener(mySensorEventListener);
    }
}