我在从自定义相机活动中拍摄照片时尝试获取设备方向。 以前,我到处检查如何实现它,并没有得到人们建议的解决方案的结果。
我正在使用这行代码来检索没有结果的方向。它总是返回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;
}
答案 0 :(得分:-2)
这是基于我所知道的猜测,但我认为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旋转并将其设置为其中之一时,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可能意味着运行时的一个小改进,但它是一个尽可能减少处理器使用的好习惯。