内置相机应用程序正确保存我的视频后出现神秘的 NullpointerException

Posted

技术标签:

【中文标题】内置相机应用程序正确保存我的视频后出现神秘的 NullpointerException【英文标题】:Mysterious NullpointerException after the built-in camera app saves my video properly 【发布时间】:2011-12-12 09:42:25 【问题描述】:

如果您打开一个对话框并单击一个图标,我有一个活动允许您录制视频。 问题是,在我停止录制后,即使视频保存正确,它也会引发 NullPointerException。根据 Log Cat 的说法,错误不在我的代码中,所以我尝试在我的代码中放置“检查点”,我发现即使我的活动的 onActivityResult 也正确执行,所以现在我不知道该怎么做。

这是原木猫:

代码:

这些来自我调用相机应用程序的对话框

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); 


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

((Activity)context).startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);



private static Uri getOutputMediaFileUri(int type)
 
    return Uri.fromFile(getOutputMediaFile(type));



private static File getOutputMediaFile(int type)

    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.
  File mediaStorageDir = new File(Environment.getExternalStorageDirectory()+"/Movies",   "MyCameraApp");
    // 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("MyCameraApp", "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_IMAGE)
        mediaFile = new File(mediaStorageDir.getPath() + "/" +
        "IMG_"+ timeStamp + ".jpg");
     else if(type == MEDIA_TYPE_VIDEO) 
        mediaFile = new File(mediaStorageDir.getPath() + "/" +
        "VID_"+ timeStamp + ".mp4");
     else 
        return null;
    

    return mediaFile;

此代码或多或少是从 android 开发者网站复制而来的。 正如我所提到的,在此之后甚至我的活动的 onActivityResult 也被正确执行(我关闭对话框)。

【问题讨论】:

嗨,我正在使用相同的代码来保存图像文件(我正在构建一个相机应用程序)。但是 getOutputMediaFile 返回一个空值。为什么会这样? 【参考方案1】:

试试这个:

private static File getOutputMediaFile(int type)

  File mediaStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);

    if (! mediaStorageDir.exists())
        if (! mediaStorageDir.mkdirs())
            Log.d("MyCameraApp", "failed to create directory");
            return null;
        
    

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String mediaFile;
    if (type == MEDIA_TYPE_IMAGE)
        mediaFile = "IMG_"+ timeStamp + ".jpg";
     else if(type == MEDIA_TYPE_VIDEO) 
        mediaFile = "VID_"+ timeStamp + ".mp4";
     else 
        return null;
    

    return new File(mediaStorageDir, mediaFile);

getExternalStorageDirectory 方法返回一个文件对象,而不是一个可以附加子目录的字符串。

它还想知道该方法返回的目录是否可用于服务。 Android 规范说:

在具有多个用户的设备上(如 UserManager 所述),每个 用户有自己独立的外部存储。应用程序只有 为他们正在运行的用户访问外部存储。

哈哈!!!!刚刚意识到这个问题是2年前提出的!你找到答案了吗??哈哈

【讨论】:

以上是关于内置相机应用程序正确保存我的视频后出现神秘的 NullpointerException的主要内容,如果未能解决你的问题,请参考以下文章

三星 Galaxy S3 上的 Android 相机预览不正确

UISaveVideoAtPathToSavedPhotosAlbum 没有将视频保存到相机胶卷

修剪后无法在相机胶卷中显示视频

将视频保存为输入而不是android中的相机

Android将视频保存到文件

相机无法访问储存卡和数据丢失的解决方法