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