我遇到了一个大问题,浏览了答案,但始终没有得到答案。如果在Android Studio的默认模拟器中进行了仿真,并且onActivityResult返回了我的视频录制意图,那么当我在手机中模拟具有android 9的Motorola g 6时,它什么也不会返回。
这是我的代码...
private void record() {
Intent intent=new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if(intent.resolveActivity(getActivity().getPackageManager())!=null){
new_video_file=getFilePath();
Uri uri = FileProvider.getUriForFile(getActivity(),
BuildConfig.APPLICATION_ID + ".provider",new_video_file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
startActivityForResult(intent,VIDEO_REQUEST);
}
}
OnActivityForResult ....
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == VIDEO_REQUEST && resultCode == RESULT_OK) {
ParseQuery<ParseObject> query = ParseQuery.getQuery("CitaTestDrive");
query.getInBackground(idEventoTestDrive, new GetCallback<ParseObject>() {
@Override
public void done(ParseObject object, ParseException e) {
videoUri = data.getData();
String file = videoUri.getPath();
File inputFile = new File(file);
try {
fileInputStream = new FileInputStream(inputFile);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
}
Bitmap thumbnailBm = BitmapFactory.decodeStream(fileInputStream);
ByteArrayOutputStream st = new ByteArrayOutputStream();
thumbnailBm.compress(Bitmap.CompressFormat.JPEG, 50, st);
byte[] byteArr = st.toByteArray();
Date currentTime = Calendar.getInstance().getTime();
ParseFile thumbFile = new ParseFile("TestDrive" + " " + currentTime + " " + nombreAsesor + ".jpg", byteArr);
object.put("Video", thumbFile);
object.saveInBackground(new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Toast.makeText(getActivity(), "Video uploaded to server", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG).show();
}
}
});
获取文件路径方法。...
private File getFilePath() {
File folder = new File(getActivity().getExternalFilesDir(null), "test_drives");
if (!folder.exists()) {
folder.mkdir();
}
Date currentTime = Calendar.getInstance().getTime();
video_file = new File(folder, "test_drives_" + currentTime + ".mp4");
return video_file;
}
private fun getRealPathFromURI(contentURI: Uri): String? {
val result: String?
val cursor = contentResolver.query(contentURI, null, null, null, null)
if (cursor == null) { // Source is Dropbox or other similar local file path
result = contentURI.path
} else {
cursor.moveToFirst()
val idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA)
result = cursor.getString(idx)
cursor.close()
}
return result
}
val file: File = File(getRealPathFromURI(Uri.parse(imagePath)))
尝试获取文件的真实路径