启动默认相机应用程序(不返回)

Posted

技术标签:

【中文标题】启动默认相机应用程序(不返回)【英文标题】:Launch default camera app (no return) 【发布时间】:2013-09-07 02:37:35 【问题描述】:

我想启动默认相机,但希望它的行为就像从启动器启动一样(即,相机应用程序应将生成的图片存储到用户的图库,而不是返回到我的应用程序) .如果我使用Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);,相机应用程序使用“OK?重试?”-UI 并且不保存图片。我宁愿不使用“直接”com.android.camera 意图,因为很多设备都使用自定义相机应用程序。我已经看到 stock gallery3d-app 使用实现 com.android.camera/.Camera 的别名,但我不确定每个预加载的制造商相机应用程序都会这样做。

【问题讨论】:

【参考方案1】:

这段代码可以解决问题:

Intent intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
context.startActivity(intent);

【讨论】:

此意图似乎优于 MediaStore.ACTION_IMAGE_CAPTURE,因为前者以照片专用模式打开某些相机应用程序,不允许用户切换到视频。 MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA 似乎没有受到同样的限制。【参考方案2】:

我现在是这样实现的:

Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
try 
    PackageManager pm = mContext.getPackageManager();

    final ResolveInfo mInfo = pm.resolveActivity(i, 0);

    Intent intent = new Intent();
    intent.setComponent(new ComponentName(mInfo.activityInfo.packageName, mInfo.activityInfo.name));
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    startActivity(intent); 
 catch (Exception e) 
    Log.i(TAG, "Unable to launch camera: " + e); 

【讨论】:

注意,您可以将Intent.ACTION_MAIN替换为MediaStore.ACTION_IMAGE_CAPTURE,让应用程序以拍照模式启动,或者MediaStore.ACTION_VIDEO_CAPTURE让应用程序以视频模式启动. 如果您从后台服务执行此操作,则需要添加 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这个答案不起作用!它会打开通讯录、Youtube 和其他不相关的应用程序。

以上是关于启动默认相机应用程序(不返回)的主要内容,如果未能解决你的问题,请参考以下文章

相机崩溃时的返回按钮

在不显示选择器的情况下启动 Native Camera

Android 默认相机崩溃

带摄像头的 iPhone UIImagepicker 像默认摄像头应用一样显示相机胶卷缩略图?

按下“确定”按钮后,Android 相机活动不会返回到我的应用程序

电子禁用特定的相机设备访问或设置默认网络摄像头