如何有目的地推出前置摄像头?

Yan*_*niv 34 android android-camera

我正在使用本机应用程序打开相机的意图:

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    Uri photoUri = Uri.fromFile(getOutputPhotoFile());
    intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

    startActivityForResult(intent, CAMERA_PHOTO_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

每次打开的相机(前/后相机)都像上次打开本机相机应用程序一样.这意味着如果我最后一次关闭本机相机应用程序时后置摄像头处于活动状态,那么当我启动相机意图时,后置摄像头将处于活动状态.

我想直接启动前置摄像头.有谁知道怎么做?

use*_*493 35

谨慎之处:它是一个黑客

将此添加到意图中

intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
Run Code Online (Sandbox Code Playgroud)

这个解决方案是不可持续的,它使用Camera应用程序的测试代码.有关更多信息,请查看AOSP Camera项目的Util类中的"getCameraFacingIntentExtras"静态方法.

更新:看起来它已在L中禁用

  • 实际上,`if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.LOLLIPOP_MR1){intent.putExtra("android.intent.extras.LENS_FACING_FRONT",1); } else {intent.putExtra("android.intent.extras.CAMERA_FACING",1); }`使用Nexus 5 5.1(如果是大小写)和三星S4 5.0.1(其他情况),但不是在Honor 7上... (3认同)
  • 在三星设备上尝试过,总是显示后置摄像头 (3认同)

Pit*_*tel 10

取自Google相机的Android 7.1快捷方式(但应与较旧的Androids配合使用)

intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
Run Code Online (Sandbox Code Playgroud)

因此,结合之前的答案,这对我可以测试它的所有手机都适用

intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);
intent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
Run Code Online (Sandbox Code Playgroud)


Evg*_*nko 10

以下代码适用于对我来说很重要的大多数设备:

 val targetPackage = getMediaCaptureIntent(imageUri).resolveActivity(packageManager)
Run Code Online (Sandbox Code Playgroud)

拍照相机:

fun getMediaCaptureIntent(mediaUri: Uri, targetPackage: String? = null): Intent {
    return Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, mediaUri)

        // Extras for displaying the front camera on most devices
        putExtra("com.google.assistant.extra.USE_FRONT_CAMERA", true)
        putExtra("android.intent.extra.USE_FRONT_CAMERA", true)
        putExtra("android.intent.extras.LENS_FACING_FRONT", 1)
        putExtra("android.intent.extras.CAMERA_FACING", 1)

        // Extras for displaying the front camera on Samsung
        putExtra("camerafacing", "front")
        putExtra("previous_mode", "Selfie")

        if (targetPackage?.contains("honor", ignoreCase = true) == true) {
            // Extras for displaying the front camera on Honor
            putExtra("default_camera", "1")
            putExtra("default_mode", "com.hihonor.camera2.mode.photo.PhotoMode")
        } else {
            // Extras for displaying the front camera on Huawei
            putExtra("default_camera", "1")
            putExtra("default_mode", "com.huawei.camera2.mode.photo.PhotoMode")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

录影机:

fun getMediaCaptureIntent(mediaUri: Uri, targetPackage: String? = null): Intent {
    return Intent(MediaStore.ACTION_VIDEO_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, mediaUri)

        // Extras for displaying the front camera on most devices
        putExtra("com.google.assistant.extra.USE_FRONT_CAMERA", true)
        putExtra("android.intent.extra.USE_FRONT_CAMERA", true)
        putExtra("android.intent.extras.LENS_FACING_FRONT", 1)
        putExtra("android.intent.extras.CAMERA_FACING", 1)

        // Extras for displaying the front camera on Samsung
        putExtra("camerafacing", "front")
        putExtra("previous_mode", "Video")

        if (targetPackage?.contains("honor", ignoreCase = true) == true) {
            // Extras for displaying the front camera on Honor
            putExtra("default_camera", "1")
            putExtra("default_mode", "com.hihonor.camera2.mode.video.VideoMode")
        } else {
            // Extras for displaying the front camera on Huawei
            putExtra("default_camera", "1")
            putExtra("default_mode", "com.huawei.camera2.mode.video.VideoMode")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


dev*_*snd -1

adb logcat您是否尝试过在本机相机应用程序中切换到前置摄像头的同时观看?如果它确实是另一个活动,那么它将在那里显示,您只需将意图复制到您的应用程序即可。如果它没有出现,我想你就不走运了。