Android视频意图不将视频保存到所需位置

时间:2014-07-02 20:19:37

标签: android video android-intent

我有这段代码:

(这是调用视频意图的代码)

Intent videoIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getOutputMediaFile()));
videoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT , 5);
videoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
startActivityForResult(videoIntent, VIDEO_REQUEST);

(其余代码)

private static final int VIDEO_REQUEST = 2888;

public static File getOutputMediaFile(){
    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), "FolderApp");
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
        //Cant create folder!!
        return null;
        }
    }
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile mediaFile = new File(mediaStorageDir.getPath() + "_VID_" + timeStamp + ".3gp");
    } else {
        return null;
    }
    return mediaFile;
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == VIDEO_REQUEST && resultCode == Activity.RESULT_OK) {
        //OK!! but not create a video file returned in getOutputMediaFile()
    }
}

视频没有将其保存到所需的位置类似的事情我尝试过使用图片捕获功能

2 个答案:

答案 0 :(得分:3)

  

视频未将其保存到所需位置

不要求相机应用遵循ACTION_IMAGE_CAPTUREACTION_VIDEO_CAPTURE的规则。有些人会尊重特定的请求输出位置。有些人不会,并会返回他们选择将图片/视频存储在[{1}}上提供的结果Uri中包含的Intent中的位置。有些可能完全被破坏,并且没有告诉您关于图像/视频存储位置的任何信息,即使存储了图像/视频。

  

我确实尝试过使用图像捕获功能

我的猜测是你没有尝试预装在设备上的数百个相机应用程序,或者可以在Play商店,亚马逊AppStore for Android,BlackBerry World,诺基亚X商店,Yandex商店,等

如果您希望依赖第三方相机应用,您最好的行动方案是:

  • 指定所需的输出位置

  • onActivityResult()中,查看输出是否写入了您请求的位置,如果是,请使用

  • 否则,在onActivityResult()中,从onActivityResult()获取Uri,如果不是Intent,则使用<{p>

  • 否则,请告诉用户下载更好的相机应用,或者将它们链接到您认为适用于您应用的应用

答案 1 :(得分:0)

您的代码看起来不错。也许你可以试试:

Environment.DIRECTORY_MOVIES

而不是

Environment.DIRECTORY_PICTURES

为您的视频位置...但它只是一个猜测

对我来说总是有用的方式:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(data == null) {
        //CANNOT GET URI
        return;
    }

    File source = new File(data.getData().getPath());
    File destination = new File(PATH_TO_YOUR_DESIRE_LOCATION,FILENAME);

    //MOVE FILE
    if(source.renameTo(destination)) {
        //success
    } else {
        //something's wrong
    }
}

此外,如果您将MediaStore.EXTRA_OUTPUT参数设置为android.provider.MediaStore.ACTION_VIDEO_CAPTURE意图,那么 getData()内的onActivityResult将始终返回null