Android MediaStore date_taken开始/结束时间

时间:2013-08-19 16:03:52

标签: android android-camera android-camera-intent

我正在编写一个允许用户录制视频的Android应用,但需要准确的录制视频时间。我想用它来将视频与设备上的其他传感器信息进行匹配。

要启动摄像机,我使用视频捕获意图:

private long intentTimestamp;

private void dispatchTakeVideoIntent() {
    intentTimestamp = System.currentTimeMillis();
    Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
    startActivityForResult(takeVideoIntent, ACTION_TAKE_VIDEO);
}

从摄像机返回时:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case ACTION_TAKE_VIDEO:
        if (resultCode == Activity.RESULT_OK) {

            // Get last recorded video from Gallery
            String date = getLastVideo();
            Log.d(TAG, "# onActivityResult: " + date);

            Toast.makeText(this, "Start intent: " + intentTimestamp
                    + ", video timestamp: " + date
                    + ". Difference: " + ((Long.parseLong(date) - intentTimestamp) / 1000) + "s",
                    Toast.LENGTH_LONG).show();

        } else if (resultCode == Activity.RESULT_CANCELED) {
            Log.d(TAG, "# onActivityResult: Cancelled");
        } else {
            Log.d(TAG, "# onActivityResult: Video capture failed");
        }
    }

}

我调用一个函数来返回录制视频的日期:

private String getLastVideo() {
    final Uri videoUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
    final String[] videoColumns = {
            MediaStore.Video.VideoColumns.DATE_TAKEN
        };
    final String videoOrderBy = MediaStore.Video.Media._ID + " DESC";

    Cursor videoCursor = getContentResolver().query(videoUri, videoColumns, null, null, videoOrderBy);

    if (videoCursor != null) {
        if (videoCursor.moveToFirst()) {
            int dateColumn = videoCursor.getColumnIndex(MediaStore.Video.VideoColumns.DATE_TAKEN);
            return videoCursor.getString(dateColumn);
        } else {
            Log.d(TAG, "# getLastVideo - videoCursor.moveToFirst() == false");
        }
    } else {
        Log.d(TAG, "# getLastVideo - videoCursor == null");
    }

    videoCursor.close();

    return null;
}

这使用android MediaStore来获取date taken(自1970年1月1日以来以毫秒为单位拍摄视频的日期和时间。)。

我现在正在测试两个HTC One。一个安装了HTC rom,另一个安装了Google Edition rom。看来,在GE rom上,所用的日期对应于我开始录制视频的时间。但是,在HTC ROM上,所用的日期对应于我结束录制的时间。

我可以从MediaStore获取视频的持续时间,我可以使用它来纠正HTC rom值,但我如何系统地在所有Android设备上执行此操作?是否有其他地方我可以获得一致的视频日期(开始或结束)?我是否需要直接在我的应用中控制相机,例如Controlling the Camera

0 个答案:

没有答案