我可以在不需要额外权限的情况下捕获视频吗

时间:2016-05-11 21:28:54

标签: android android-intent android-permissions

我尝试使用MediaStore.ACTION_VIDEO_CAPTURE Intent动作录制视频。

这会启动相机活动,我可以捕捉视频。问题是我没有权限阅读返回的file:// uri:

protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    String uriStr = intent.getData().toString();
    /**
    * uriString contains file:/storage/emulated/0/DCIM/Camera/VID_20160511_142405.mp4
    */
    try {
        getContentResolver().openInputStream(intent.getData()).close();
    } catch (IOException e) {
    }
}

我希望Camera应用程序授予我http://developer.android.com/guide/topics/providers/content-provider-basics.html#Intents中描述的临时权限。但它失败并出现权限错误:

java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/VID_20160511_142806.mp4: open failed: EACCES (Permission denied)

有没有办法在没有READ_EXTERNAL_STORAGE权限的情况下获取视频?

1 个答案:

答案 0 :(得分:3)

  

我希望Camera应用程序授予我临时权限

file: Uri无法做到这一点。只有content: Uri才能实现这一点。

  

有没有办法在没有READ_EXTERNAL_STORAGE权限的情况下请求视频?

在您的应用中添加FileProvider。然后,在EXTRA_OUTPUT ACTION_VIDEO_CAPTURE上使用Intent,从content:提供Uri FileProvider。在Intent上添加相应的标记,以授予对ACTION_VIDEO_CAPTURE Intent的任何应用处理的写入权限。然后 - 假设相机应用程序写得很好 - 视频将被写入应用程序内部存储中的文件(或配置FileProvider以供服务的任何地方),您将不需要{{ 1}}。

但请注意,如果READ_EXTERNAL_STORAGE为23 +,则至少需要CAMERA权限,至少在Android 6.0及以上。