Android Intent不设置相机参数
我正在打开相机应用程序作为我的应用程序的外部意图。我使用以下代码调用相机,以下是我的条件:Android Intent不设置相机参数,android,android-intent,camera,android-camera,android-camera-intent,Android,Android Intent,Camera,Android Camera,Android Camera Intent,我正在打开相机应用程序作为我的应用程序的外部意图。我使用以下代码调用相机,以下是我的条件: 它应该打开前摄像头 最高画质 闪光灯必须亮着 以下是我的代码: Intent action = new Intent("android.media.action.IMAGE_CAPTURE"); action.putExtra("android.intent.extras.CAMERA_FACING", 1); action.putExtra("android.in
Intent action = new Intent("android.media.action.IMAGE_CAPTURE");
action.putExtra("android.intent.extras.CAMERA_FACING", 1);
action.putExtra("android.intent.extras.FLASH_MODE_ON", 1);
action.putExtra("android.intent.extras.QUALITY_HIGH", 1);
现在,它确实打开了前置摄像头,但没有打开闪光灯,也没有将图像质量设置为高
我的清单文件的权限部分如下所示:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera.flash" />
有什么我遗漏的吗?不幸的是,当有目的地使用相机时,唯一可以设置的额外参数是
MediaStore.EXTRA_OUTPUT
乙二醇
这允许您映射相机应用程序将存储图像的位置
面向目标的照相机有时可以工作:
action.putExtra("android.intent.extras.CAMERA_FACING", 1);
查看android源文件,有一些“测试”方法位于Util类文件中,但没有正式记录:
(Util)
在光模块中,使用以下方法:
(光电模块)
当摄像头应用程序初始化拍照模式时,它会调用此方法检查要使用的摄像头:
mCameraId = getPreferredCameraId(mPreferences);
这是使用前摄像头而不是默认的后摄像头开始拍摄的目的
它的工作原理与此链接第145行中流行的cordova插件中使用的一样:
希望这能帮助任何面临同样问题的人
另外,您是否知道您是否可以设置禁用相机控制(过滤器、在相机之间切换等)的意图,以便它们不会显示?这意味着我必须执行SurfaceLayOut?没有办法从这里进行闪光灯和分辨率设置?如果是这样,这是如何工作的?action.putExtra(“android.intent.extras.CAMERA_FACING”,1)。它成功地在前后摄像头之间切换。是的,我认为这取决于你正在使用的特定摄像头应用程序是否支持额外的意图。是的,我认为这有时取决于手机的api水平和制造商自己的camera appOK实现。所以在这一刻,我认为我唯一的选择是浮出水面查看并实例化摄影机对象,并将所有参数传递给它。。正确吗?这是一个常数,它总是1,所以这与问题中的完全相同:
action.putExtra(“android.intent.extras.CAMERA_-face”,1)代码>
private static final String EXTRAS_CAMERA_FACING =
"android.intent.extras.CAMERA_FACING";
// This is for test only. Allow the camera to launch the specific camera.
public static int getCameraFacingIntentExtras(Activity currentActivity) {
int cameraId = -1;
int intentCameraId =
currentActivity.getIntent().getIntExtra(Util.EXTRAS_CAMERA_FACING, -1);
if (isFrontCameraIntent(intentCameraId)) {
// Check if the front camera exist
int frontCameraId = CameraHolder.instance().getFrontCameraId();
if (frontCameraId != -1) {
cameraId = frontCameraId;
}
} else if (isBackCameraIntent(intentCameraId)) {
// Check if the back camera exist
int backCameraId = CameraHolder.instance().getBackCameraId();
if (backCameraId != -1) {
cameraId = backCameraId;
}
}
return cameraId;
}
private int getPreferredCameraId(ComboPreferences preferences) {
int intentCameraId = Util.getCameraFacingIntentExtras(mActivity);
if (intentCameraId != -1) {
// Testing purpose. Launch a specific camera through the intent
// extras.
return intentCameraId;
} else {
return CameraSettings.readPreferredCameraId(preferences);
}
}
mCameraId = getPreferredCameraId(mPreferences);
intent.putExtra("android.intent.extras.CAMERA_FACING", android.hardware.Camera.CameraInfo.CAMERA_FACING_FRONT);