2016-11-15 118 views
0

我想从我的应用程序打开Android默认的视频摄像头,使用如下代码:Android的默认摄像机意图打开图像相机

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
startActivityForResult(intent, 1); 

但在我的两部手机(三星注2,和谷歌像素),它会打开图像相机。我在我的清单中有这个权限:

<uses-permission android:name="android.permission.CAMERA"/> 

任何想法是什么原因导致此问题? 我也在运行时请求了权限。

+0

[此示例应用](https://github.com/commonsguy/cw-omnibus/tree/master/Media/VideoRecordIntent)使用'ACTION_VIDEO_CAPTURE'在Pixel上正常工作。 – CommonsWare

+0

尝试了一些从应用程序的东西,但它仍然无法正常工作。我也在使用uses-feature的东西,但是这不会改变任何东西 – Userrrrrrrrr

+0

我刚刚从示例应用程序中将意图的代码复制到我的应用程序中,但它仍然不起作用 – Userrrrrrrrr

回答

0

您必须添加下一个代码。设备具有Android 6.0或更高版本。

if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){ 
     Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
     startActivityForResult(intent, 1); 
    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 2); 
    } 

如果你的应用有使用权限STORAGE我们打开存储。

如果您的应用程序没有使用STORAGE的权限,我们会打开系统对话框。 您可以在onRequestPermissionsResult中看到的对话框的结果。 (您必须在您的活动上覆盖它)。

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
     @NonNull int[] grantResults) { 
    if (requestCode == 2) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
      startActivityForResult(intent, 1); 
     } 
    } 
} 

我认为你必须提取私有方法的下一行。

private void takePhoto() { 
    Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
    startActivityForResult(intent, 1); 
} 

欲了解更多信息,请参阅:https://developer.android.com/training/permissions/requesting.html

+0

我已经申请了所有权限,但是仍然无法正常工作。相机应用程序开始罚款...但由于某种原因,它启动图像相机,而不是视频相机 – Userrrrrrrrr

+0

添加以下权限: –

+0

CAPTURE_SECURE_VIDEO_OUTPUT –

0

添加后续许可CAPTURE_SECURE_VIDEO_OUTPUT和CAPTURE_VIDEO_OUTPUT