尝试使用相机意图捕获视频时,应用程序崩溃

时间:2014-01-14 12:51:17

标签: android

我正在关注如何使用相机意图捕获视频的Android website上的教程,但是启动时应用程序崩溃。

我不确定MEDIA_TYPE_VIDEO是否具有良好的价值。其他所有内容都与Android网站相同。

这就是我所拥有的:

public class Main extends Activity {

    private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
    private Uri fileUri;
    public static final int MEDIA_TYPE_VIDEO = 2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        //create new Intent
        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);

        fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);  // create a file to save the video
        intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);  // set the image file name

        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high

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

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

    /** Create a File for saving an image or video */
    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.getExternalStoragePublicDirectory(
                Environment.DIRECTORY_PICTURES), "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_VIDEO) {
            mediaFile = new File(mediaStorageDir.getPath() + File.separator +
                    "VID_"+ timeStamp + ".mp4");
        } else {
            return null;
        }

        return mediaFile;
    }
}

有谁知道问题出在哪里?

2 个答案:

答案 0 :(得分:0)

我会把钱放在权限上......

在使用Camera API开始使用您的应用程序进行开发之前, 你应该确保你的清单有适当的声明 允许使用相机硬件和其他相关功能。

相机权限 - 您的应用程序必须请求使用权限  设备相机。

<uses-permission> android:name="android.permission.CAMERA" /> 

注意:如果您正在使用 相机通过意图,您的应用程序不需要请求此 允许。相机功能 - 您的应用程序还必须声明使用 相机功能,例如:

<uses-feature> android:name="android.hardware.camera" />

存储权限 - 如果您的应用程序将图像或视频保存到设备的外部存储(SD卡),则还必须在清单中指定。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

答案 1 :(得分:0)

getOutputMediaFile返回null 您应该检查外部存储是否可用,并允许对其进行写入操作。

    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        mExternalStorageAvailable = mExternalStorageWriteable = true;
    } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        mExternalStorageAvailable = true;
        mExternalStorageWriteable = false;
    } else {
        mExternalStorageAvailable = mExternalStorageWriteable = false;
    }

Android官方文档中的这段代码显示了如何检查