我正在尝试从自定义相机活动中拍摄照片时获取设备方向。
以前,我到处检查如何实现它,但没有得到人们建议的解决方案的结果。
我正在使用这行代码来检索没有结果的方向。它总是返回1。如果有帮助的话,我正在使用三星Galaxy S III进行开发。
int rotation = getWindowManager().getDefaultDisplay().getRotation();
Log.d(TAG, "Taken rotation " + rotation);
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;
int height = dm.heightPixels;
int orientation;
// if the device's natural orientation is portrait:
if ((rotation == Surface.ROTATION_0
|| rotation == Surface.ROTATION_180) && height > width ||
(rotation == Surface.ROTATION_90
|| rotation == Surface.ROTATION_270) && width > height) {
switch(rotation) {
case Surface.ROTATION_0:
orientation = 0;
break;
case Surface.ROTATION_90:
orientation = 90;
break;
case Surface.ROTATION_180:
orientation =180;
break;
case Surface.ROTATION_270:
orientation = 270;
break;
default:
Log.e(TAG, "Unknown screen orientation. Defaulting to " +
"portrait.");
orientation = 0;
break;
}
最佳答案
这是一个基于我所知的猜测,但我在想surface.rotation_90是一个常量整数名。把它想象成这样:
final int Surface.ROTATION_0 = 0;
final int Surface.ROTATION_90 = 1;
final int Surface.ROTATION_180 = 2;
final int Surface.ROTATION_270 = 3;
在程序开始时。当预编译程序看到其中一个常量时,它会自动将其替换为等价的整数。当初始化时,您是int rotation,并将其设置为其中一个,int保存常量初始化时的值。
所以,如果您想直接检查surface.rotation,那么每次检查时可能都必须调用getRotation();
类似于:
Display display = getWindowManager().getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0)
{
//whatever you need to do here
}
等。
或者,您可以简单地检查这些常量计算为的整数。
int rotation = getWindowManager().getDefaultDisplay().getRotation;
if(rotation == 0)
{
//whatever you need to do here
}
等。
就我个人而言,我会选择第二种。不必每次检查都调用getrotation可能意味着运行时会有一点改进,但是尽可能减少处理器的使用是一个好习惯。
关于android - 。getDefaultDisplay()getRotation();返回始终相同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16852774/