8

したがって、私たちのアプリには、写真またはビデオを撮影するオプションがあります。ユーザーが写真を撮った場合、MediaStore.Images.Media.insertImage 関数を使用して新しい画像を (ファイルパス経由で) 電話のギャラリーに追加し、content:// スタイルの URI を生成できます。ファイルパスしかない場合、キャプチャしたビデオに同様のプロセスはありますか?

4

5 に答える 5

7

私も興味があります、あなたは解決策を見つけることができますか?

編集:解決策はRTFMです。「コンテンツプロバイダー」の章に基づいて、ここで機能した私のコードは次のとおりです。

        // Save the name and description of a video in a ContentValues map.  
        ContentValues values = new ContentValues(2);
        values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
        // values.put(MediaStore.Video.Media.DATA, f.getAbsolutePath()); 

        // Add a new record (identified by uri) without the video, but with the values just set.
        Uri uri = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);

        // Now get a handle to the file for that record, and save the data into it.
        try {
            InputStream is = new FileInputStream(f);
            OutputStream os = getContentResolver().openOutputStream(uri);
            byte[] buffer = new byte[4096]; // tweaking this number may increase performance
            int len;
            while ((len = is.read(buffer)) != -1){
                os.write(buffer, 0, len);
            }
            os.flush();
            is.close();
            os.close();
        } catch (Exception e) {
            Log.e(TAG, "exception while writing video: ", e);
        } 

        sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
于 2010-02-10T12:35:32.537 に答える
6

アプリが新しいビデオを生成していて、そのためのメタデータを MediaStore に提供したいだけの場合は、この関数を基に構築できます。

public Uri addVideo(File videoFile) {
    ContentValues values = new ContentValues(3);
    values.put(MediaStore.Video.Media.TITLE, "My video title");
    values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
    values.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());
    return getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
}

EDIT : Android 4.4 (KitKat) 以降、このメソッドは機能しなくなりました。

于 2012-07-31T18:52:29.480 に答える