如何检测android设备的方向?

是否可以很简单地检测android设备的当前方向,而不编程一个监听器和处理位置matrix? 在我的应用程序中,我只想知道当前的方向 – 垂直或水平。 但是我不想听取公理或其他事件的事件。

使用getRotation方法:

 Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int rotation = display.getRotation(); 

从文档:

从“自然”方向返回屏幕的旋转。 返回的值可能是Surface.ROTATION_0 (不旋转), Surface.ROTATION_90Surface.ROTATION_180Surface.ROTATION_270 。 例如,如果设备具有自然高大的屏幕,并且用户已经将其转向横向以进入横向方向,则这里返回的值可以是Surface.ROTATION_90Surface.ROTATION_270这取决于其转向的方向。 angular度是屏幕上绘制的graphics的旋转,这是设备的物理旋转的相反方向。 例如,如果设备逆时针旋转90度,则补偿渲染将顺时针旋转90度,因此返回的值将为Surface.ROTATION_90

请记住, getRotation是从Android 2.2引入的。 如果您的目标是较旧的设备,请使用getOrientation

你也可以使用:

 getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE 

有一个关于这个主题是一个不错的文章是必读: 一个屏幕转向值得一个

你只需要知道你的canvas的高度和宽度……你的表面……你的显示器……等等

也许你可以得到它:

 if (canvas.getHeight()>canvas.getWidth() ) { //portrait } else { //landscape } 

我认为最安全和最简单的方法是在XML中为您的活动的某个元素添加标签。 例如,在纵向布局中将viewpager的标记设置为“纵向”,并将横向设置为“横向”。 然后在你的oncreate检查标签是这样的:

 if(mViewpager.getTag().equals("portrait")) // is in portrait else // is in landscape 

这可能不是相关的,但如果碰巧你需要知道这一点,因为你想locking设备的当前方向,你可以切换下面两行代码。

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);