使用Intent启动“剪裁视频”活动。

6

现在我可以通过Intent拍摄视频,那么创建一个Intent以启动默认的视频修剪器活动需要哪些细节呢?并且如何检查设备上是否存在它?

2个回答

9

这个解决方案依赖于设备上安装了AOSP Gallery2软件包的版本。您可以按照以下步骤进行操作:

// The Intent action is not yet published as a constant in the Intent class
// This one is served by the com.android.gallery3d.app.TrimVideo activity
// which relies on having the Gallery2 app or a compatible derivative installed
Intent trimVideoIntent = new Intent("com.android.camera.action.TRIM");

// The key for the extra has been discovered from com.android.gallery3d.app.PhotoPage.KEY_MEDIA_ITEM_PATH
trimVideoIntent.putExtra("media-item-path", getFilePathFromVideoURI(this, videoUri));
trimVideoIntent.setData(videoUri);

// Check if the device can handle the Intent
List<ResolveInfo> list = getPackageManager().queryIntentActivities(trimVideoIntent, 0);
if (null != list && list.size() > 0) {
    startActivity(trimVideoIntent); // Fires TrimVideo activity into being active
}

getFilePathFromVideURI 方法基于这个问题的答案:从mediastore获取URI的文件名和路径

public String getFilePathFromVideoURI(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
        String[] proj = { MediaStore.Video.Media.DATA };
        cursor = context.getContentResolver().query(contentUri,  proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

videoUri是一个指向类似于 content://media/external/video/media/43Uri。你可以通过发出ACTION_PICK Intent来获取它:

Intent pickVideoUriIntent =  new Intent(Intent.ACTION_PICK, MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickVideoUriIntent, PICK_VIDEO_REQUEST);

onActivityResult中获取uri的方法如下:
....
case PICK_VIDEO_REQUEST:
    Uri videoUri = data.getData();
     ...

这个解决方案适用于我的Galaxy Nexus和Android 4.3 Jelly Bean。

我不确定这是否适用于所有Android设备。一个更可靠的解决方案可能是分支Gallery2应用程序,并将TrimVideo活动及其依赖项放入可以随您的应用程序一起交付的库中。 希望这能帮到你。


只希望在裁剪并保存后,它能返回到我的应用程序。 - user1447209
您好, 当我按照您的代码操作时,出现了“此图像不支持编辑”的Toast消息。我无法理解这是什么意思,请帮助我。 谢谢。 - Pratik Sanyaja
@PratikSanyaja 这个回答的第一句话解释了这个回答需要你在设备上安装一个版本的AOSP Gallery2。如果你没有安装,你会看到你现在看到的这个消息。 - Mira_Cole

-1

试试这个,也许会有帮助

Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra("android.intent.extra.durationLimit", 30000);
intent.putExtra("EXTRA_VIDEO_QUALITY", 0);
startActivityForResult(intent, ActivityRequests.REQUEST_TAKE_VIDEO);

这段代码在API >=2.2上运行良好,但是在API 2.1上持续时间限制不起作用。


1
我不想拍摄视频,我已经说过我会这样做了,我想要剪辑一个已经存在的视频。 - user1447209

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接