gpt4 book ai didi

android android.provider.MediaStore.ACTION_VIDEO_CAPTURE 返回 null onActivityResult 与 nexus 7

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:50 25 4
gpt4 key购买 nike

我正在使用 intent 录制视频。

所以我在 recordVideo 按钮的点击上使用了以下代码

Videofilepath = "";
Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(intent,REQUEST_VIDEO_CAPTURED);

并在 onActivityResult 中

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case IMAGE_PICK:
this.imageFromGallery(resultCode, data);
break;
case IMAGE_CAPTURE:
this.imageFromCamera(resultCode, data);
break;
case REQUEST_VIDEO_CAPTURED:
this.videoFromCamera(resultCode, data);

break;
default:
break;
}
}
}


private void videoFromCamera(int resultCode, Intent data) {
uriVideo = data.getData();


uploadedFileName="";
Constant.IS_FILE_ATTACH = true;

Toast.makeText(PDFActivity.this, uriVideo.getPath(), Toast.LENGTH_LONG)
.show();
String[] filePathColumn = { MediaStore.Video.Media.DATA };

Cursor cursor = getContentResolver().query(uriVideo, filePathColumn,
null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
Videofilepath = filePath;
System.out.println("Videofilepath filepath from camera : "
+ Videofilepath);
cursor.close();
File f = new File(filePath);
System.out.println("file created ? : " + f.exists());

Bitmap bMap = null;
do {
try {
// Simulate network access.
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (!f.exists());
bMap = ThumbnailUtils.createVideoThumbnail(filePath,
MediaStore.Video.Thumbnails.MICRO_KIND);
do {
try {
// Simulate network access.
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} while (bMap == null);
imageOrVideo = "video";
attachmentvalue.setImageBitmap(bMap);
}

此代码适用于 samsung galaxy Tab。但不适用于 Nexus 7。可能是 Nexus 7 有前置摄像头。 但我得到的结果数据 Intent 是 null onActivityResult。

所以在我的 Logcat 中出现以下异常:-

08-08 12:51:31.160: E/AndroidRuntime(10899): FATAL EXCEPTION: main
08-08 12:51:31.160: E/AndroidRuntime(10899): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=200, result=-1, data=Intent { }} to activity {com.example.activity/com.example.PDFActivity}: java.lang.NullPointerException

最佳答案

我终于解决了这个问题。Nexus 7 将视频存储在 DCIM 目录中,但 onActivityResults 返回 null。这是 Nexus 7 设备的记录问题。

所以用 intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
解决这个问题代码如下:-

记录按钮点击代码:-

  intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);    
fileUri = getOutputMediaFile(MEDIA_TYPE_VIDEO); // create a file to save the video in specific folder (this works for video only)
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

// start the Video Capture Intent
startActivityForResult(intent, REQUEST_VIDEO_CAPTURED_NEXUS);

switch 中的代码 - onActivityResult 的 case block :-

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case REQUEST_VIDEO_CAPTURED_NEXUS:
this.videoFromCameraNexus(resultCode, data);
break;

default:
break;
}
}
}

//videoFromCameraNexus 方法

private void videoFromCameraNexus(int resultCode, Intent data) {

if(fileUri != null) {
Log.d(TAG, "Video saved to:\n" + fileUri);
Log.d(TAG, "Video path:\n" + fileUri.getPath());
Log.d(TAG, "Video name:\n" + getName(fileUri));
// use uri.getLastPathSegment() if store in folder
//use the file Uri.
}
}

通过以下方法获取输出的媒体文件uri

public Uri getOutputMediaFile(int type)
{
// To be safe, you should check that the SDCard is mounted

if(Environment.getExternalStorageState() != null) {
// this works for Android 2.2 and above
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES), "SMW_VIDEO");

// This location works best if you want the created images to be shared
// between applications and persist after your app has been uninstalled.

// Create the storage directory if it does not exist
if (! mediaStorageDir.exists()) {
if (! mediaStorageDir.mkdirs()) {
Log.d(TAG, "failed to create directory");
return null;
}
}

// Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if(type == MEDIA_TYPE_VIDEO) {
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"VID_"+ timeStamp + ".mp4");
} else {
return null;
}

return Uri.fromFile(mediaFile);
}

return null;
}

它对我有用。

关于android android.provider.MediaStore.ACTION_VIDEO_CAPTURE 返回 null onActivityResult 与 nexus 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com