Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 启动默认照相机应用程序(无返回)_Android_Android Camera_Android Camera Intent - Fatal编程技术网

Android 启动默认照相机应用程序(无返回)

Android 启动默认照相机应用程序(无返回),android,android-camera,android-camera-intent,Android,Android Camera,Android Camera Intent,我想启动默认摄像头,但希望它的行为与从启动器启动的一样(即,生成的图片应该由摄像头应用程序存储到用户的多媒体资料中,而不是返回到我的应用程序中)。如果我使用Intent-cameraIntent=newintent(android.provider.MediaStore.ACTION\u-IMAGE\u-CAPTURE),相机应用程序使用“确定?重试?”-UI,不保存图片。我不想使用“direct”com.android.cameraintent,因为很多设备都使用定制的摄像头应用程序。我已经看

我想启动默认摄像头,但希望它的行为与从启动器启动的一样(即,生成的图片应该由摄像头应用程序存储到用户的多媒体资料中,而不是返回到我的应用程序中)。如果我使用
Intent-cameraIntent=newintent(android.provider.MediaStore.ACTION\u-IMAGE\u-CAPTURE),相机应用程序使用“确定?重试?”-UI,不保存图片。我不想使用“direct”
com.android.camera
intent,因为很多设备都使用定制的摄像头应用程序。我已经看到stock gallery3d应用程序使用了一个别名来实现
com.android.camera/.camera
,但我不确定每个预加载的制造商camera应用程序都能做到这一点。

我现在实现了如下:

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 intent = new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA);
context.startActivity(intent);

注意,您可以调出
Intent.ACTION\u MAIN
并将该操作替换为
MediaStore.ACTION\u IMAGE\u CAPTURE
以照片拍摄模式启动应用程序,或
MediaStore.ACTION\u VIDEO\u CAPTURE
以视频拍摄模式启动应用程序。如果您是从后台服务执行此操作,则需要添加Intent.setFlags(意图、标志、活动、新任务);此答案无效!它会打开联系人、Youtube和其他不相关的应用程序。此意图似乎优于MediaStore.ACTION\u IMAGE\u CAPTURE,因为以前的方法以照片专用的模式打开某些相机应用程序,不允许用户切换到视频。MediaStore.intent\u ACTION\u STILL\u IMAGE\u相机似乎不会受到影响我也有同样的限制。