最近在做安卓手机上传视频和录音,用的是意图intent,选择手机相册中的视频或者照片,在
onActivityResult方法下进行返回,这是选择视频,然后再返回当前图片的第一帧作为封面,我是用华为手机做的测试,发现一直报的是权限问题,但是我清单文件中都已经配置完了,后来发现是华为手机在录音或者选择视频的时候必须再次请求权限,所以我上网找了一下请求权限的代码,
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.RECORD_AUDIO
};
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE);
}
}
if (data == null) {
return;
}
Uri uriVideo = data.getData();
ContentResolver contentVideo = this.getContentResolver();
Cursor cursorVideo = contentVideo.query(uriVideo, null, null, null, null);
if (cursorVideo != null && cursorVideo.moveToNext()) {
final String path = cursorVideo.getString(cursorVideo.getColumnIndex(MediaStore.Video.Media.DATA));
Log.i("MOSES", "path--->" + path);//这里能获取到视频的路径
System.out.println("VoiceAptitudeActivity当前路径是" + path);
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(path);
int ringDuring = Integer.parseInt(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)) / 1000;
if (ringDuring > 15) {
Toast.makeText(VoiceAptitudeActivity.this, "视频要小于15秒哦~", Toast.LENGTH_SHORT).show();
} else {
Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(path, MediaStore.Video.Thumbnails.MINI_KIND);
iv_video.setImageBitmap(bitmap);
iv_pause.setVisibility(View.VISIBLE);
}
intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//设置数据格式
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "video/*");
//设置带返回值的跳转
startActivityForResult(intent, CHOOSEVIDEO_REQUEST_CODE);