【问题标题】: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 的别名,但我不确定每个预加载的制造商相机应用程序都会这样做。

【问题讨论】:

    标签: android android-camera android-camera-intent


    【解决方案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 和其他不相关的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多