0
誰かがこの問題を助けてくれることを願っています。保存されたビデオはギャラリーに表示されません
私は、ユーザーがビデオ(.mp4)を撮ったり、既存のものを選ぶことを可能にするアプリを持っています。ビデオを撮影する場合、ビデオはパブリックディレクトリに保存され、アンドロイドがファイルをスキャンしてメディアギャラリーに追加するようにトリガしました。
問題はです。ビデオがうまくいけば、完成したビデオをアプリでプレビューできます。しかし、この同じビデオはメディアギャラリーには表示されず、同じフォルダ内の他の.mp4がリストに表示されているにもかかわらず、FileManager以外の他のアプリケーションからアクセスできなくなります。
さらに詳細:FileManagerのアプリで
- 登場するものは、サムネイルを得ながら、-表示されていないファイルは、アイコンビデオアイコンを持っています。私はFileManagerアプリでファイルをカットアンドペーストすることでメディアギャラリーアプリに追加されるこれらの出現しないファイルをトリガーすることができます(私はファイルが破損しているとは思わない)。
- スキャンコードは、既存のカメラアプリから画像を撮る私のコードのために正常に動作し、それだけでビデオのもののために動作しません...
は仕事に、このための追加の許可の必要があります?私は追加/尋ねる/要求の書き込みとextからの読み取りの許可をしました。ストレージとカメラを私のマニフェストとコードに入れてください。上記のコードで各ログの
private void takeVideo() {
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (takeVideoIntent.resolveActivity(ctx.getPackageManager()) != null) {
// Create the file where photo should go
File mediaFile = null;
try {
mediaFile = getOutputMediaFile(ctx, MEDIA_TYPE_VIDEO);
} catch (IOException ex) {
Log.e("FragCamera", "takeVideo() : Error occurred while creating File." + ex);
}
if (mediaFile != null) {
Uri mediaUri = Uri.fromFile(mediaFile);
Log.d("FragCamera", "takeVideo() mediaUri: " + mediaUri);
currMediaUri = mediaUri;
currPhotoPath = mediaFile.getAbsolutePath();
Log.d("FragCamera", "takeVideo() currPhotoPath: " + currPhotoPath);
//make the new file available for other apps
updateMediaGallery(mediaFile);
MediaScannerConnection.scanFile(
ctx,
new String[]{currPhotoPath},
new String[]{"video/mp4"},
new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
Log.v("FragCameraScan",
"file " + path + " was scanned seccessfully: " + uri);
}
});
takeVideoIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mediaUri);
this.startActivityForResult(takeVideoIntent, I_REQUEST_VIDEO_CAPTURE);
}
}
}
private void galleryAddPic(String filePath) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(filePath);
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
ctx.sendBroadcast(mediaScanIntent);
}
Logcat値:
D/FragCamera: takeVideo() mediaUri: file:///storage/emulated/0/DCIM/Camera/VID_20161207_142021.mp4
D/FragCamera: takeVideo() currPhotoPath: /storage/emulated/0/DCIM/Camera/VID_20161207_142021.mp4
V/FragCameraScan: file /storage/emulated/0/DCIM/Camera/VID_20161207_142021.mp4 was scanned seccessfully: null
ありがとうございました!これは動作します!なぜこれがうまくいくのか説明できますか?メタデータはありますか?しかし、私はビデオが保存されたときにメタデータが既にそこにあると思った... –
はいメタデータです。これがなければ、無用なファイルだけがsdcard.videoファイルに保存されます。少なくとも、これらのパラメータを設定しないと生データです。 –
うーん、私が保存したときに自動的に作成されない/追加されたと思います...ありがとう@アブドラを説明しよう! –