Android模拟器相机 - 网络摄像头方向

Oha*_*von 6 android android-emulator android-camera android-orientation

我正在使用我的Mac网络摄像头在模拟器中模拟Android前置摄像头.不幸的是,相机似乎是横向的 - 截图,即使模拟器是纵向的.

请注意,相机在真实设备上表现正常(即它具有纵向).

My Emulator配置:Nexus 5X,Android Nougat 7.1.1,API Level 25,启动方向:纵向,前置摄像头:摄像头0,后置摄像头:仿真

如何以正确的方向使用网络摄像头?

Oha*_*von 7

最终我通过检测我是否在模拟器中运行来解决这个问题:

public static boolean isEmulator() {
  return Build.FINGERPRINT.startsWith("generic")
    || Build.FINGERPRINT.startsWith("unknown")
    || Build.MODEL.contains("google_sdk")
    || Build.MODEL.contains("Emulator")
    || Build.MODEL.contains("Android SDK built for x86")
    || Build.MANUFACTURER.contains("Genymotion")
    || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
    || "google_sdk".equals(Build.PRODUCT);
}
Run Code Online (Sandbox Code Playgroud)

然后对预览纹理应用变换:

Matrix matrix = new Matrix();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point displaySize = new Point();
display.getRealSize(size);
RectF viewRect = new RectF(0, 0, mCameraPreview.getWidth(), mCameraPreview.getHeight());
float centerX = viewRect.centerX();
float centerY = viewRect.centerY();
float scale = (float) mCameraPreview.getWidth() / (float) displaySize.x;
matrix.postScale(scale, scale, centerX, centerY);
matrix.postRotate(270, centerX, centerY);
mCameraPreview.setTransform(matrix);
Run Code Online (Sandbox Code Playgroud)