我正在使用本机应用程序打开相机的意图:
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);
每次打开的相机(前/后相机)都像上次打开本机相机应用程序一样。这意味着如果我最后一次关闭本机相机应用程序时后置摄像头处于活动状态,那么当我启动相机的意图时,后置摄像头将处于活动状态。
我想直接启动前置摄像头。有人知道怎么做吗?
答案 0 :(得分:34)
提醒:这是一个黑客
将此添加到意图
intent.putExtra("android.intent.extras.CAMERA_FACING", 1);
此解决方案不可持续,它使用相机应用程序的测试代码。有关更多信息,请查看AOSP Camera项目的Util类中的“getCameraFacingIntentExtras”静态方法。
<强>更新强> 看起来它在L
中被禁用了答案 1 :(得分:8)
取自Google相机的Android 7.1快捷方式(但应与较旧的Androids配合使用)
intent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
因此,结合之前的答案,这对我来说可以在我可以测试的所有手机上使用
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);
答案 2 :(得分:3)
没有专门针对前置摄像头的意图(AFAIK)。
以编程方式执行此操作:Android SDK&lt; = 2.2仅支持使用单个摄像头(第一个后置摄像头)。对于2.3+,您可以通过摄像机循环并找出哪个是前置摄像头(如果可用)。它就像是......
Camera cam = null;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
for (int camNo = 0; camNo < Camera.getNumberOfCameras(); camNo++) {
CameraInfo camInfo = new CameraInfo();
Camera.getCameraInfo(camNo, camInfo);
if (camInfo.facing.equals(Camera.CameraInfo.CAMERA_FACING_FRONT)) {
cam = Camera.open(camNo);
}
}
if (cam == null) {
// no front-facing camera, use the first back-facing camera instead.
// you may instead wish to inform the user of an error here...
cam = Camera.open();
}
// ... do stuff with Camera cam ...
此示例仅为骨架,不提供任何(非常需要的)错误处理。
编辑:您还需要将这些添加到您的清单中:
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
答案 3 :(得分:3)
经过对华为和三星相机的一些逆向工程,以下代码适用于对我来说很重要的大多数设备:
Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
putExtra(MediaStore.EXTRA_OUTPUT, photoUri)
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)
// Samsung
putExtra("camerafacing", "front")
putExtra("previous_mode", "front")
// Huawei
putExtra("default_camera", "1")
putExtra("default_mode", "com.huawei.camera2.mode.photo.PhotoMode")
}
答案 4 :(得分:1)
以下代码将在 Android 11
之前有效,包括 Samsung
电话
fun updateIntentForCameraFacing(cameraIntent: Intent, frontFacing: Boolean){
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
if(frontFacing)
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_BACK)
else
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_FRONT)
}
else if(frontFacing){
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_BACK)
cameraIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true)
//samsung
cameraIntent.putExtra("camerafacing", "front")
cameraIntent.putExtra("previous_mode", "front")
}
else{
cameraIntent.putExtra("android.intent.extras.CAMERA_FACING", CameraCharacteristics.LENS_FACING_FRONT)
cameraIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", false)
//samsung
cameraIntent.putExtra("camerafacing", "rear")
cameraIntent.putExtra("previous_mode", "rear")
}
}
答案 5 :(得分:0)
试试这个:
df3 = pd.merge(df2, df1.drop('Country', axis=1), on=['Date','Campaign','Banner'], how='left')
df4 = pd.merge(df2, df1, on=['Date','Banner'], how='left')
print (df3)
Banner Campaign Country Date Value_2 id_campaign Value_1
0 banner1 campaign1 de 1/1/2016 5 none 10.0
1 banner2 campaign2 it 2/1/2016 10 none 5.0
2 banner3 none de 1/1/2016 15 12345 NaN
3 banner4 campaign4 en 3/1/2016 20 none NaN
4 banner5 campaign5 en 4/1/2016 25 none NaN
print (df4['Value_1'])
0 10.0
1 5.0
2 20.0
3 NaN
4 NaN
Name: Value_1, dtype: float64
df3['Value_1'] = df3['Value_1'].combine_first(df4['Value_1']).fillna(0).astype(int)
print (df3)
Banner Campaign Country Date Value_2 id_campaign Value_1
0 banner1 campaign1 de 1/1/2016 5 none 10
1 banner2 campaign2 it 2/1/2016 10 none 5
2 banner3 none de 1/1/2016 15 12345 20
3 banner4 campaign4 en 3/1/2016 20 none 0
4 banner5 campaign5 en 4/1/2016 25 none 0
答案 6 :(得分:0)
pictureIntent.putExtra("android.intent.extra.USE_FRONT_CAMERA", true);
pictureIntent.putExtra("android.intent.extras.LENS_FACING_FRONT", 1);
pictureIntent.putExtra("android.intent.extras.CAMERA_FACING", 1);
working on intex
答案 7 :(得分:-1)
在您的原生相机应用程序中切换到前置摄像头时,您是否尝试过观看adb logcat
?如果它确实是另一个活动,那么它将在那里显示,你可以简单地将意图复制到你的应用程序。如果它没有出现,我猜你是运气不好。