标签: mediastore

使用Android MediaStore管理媒体

我直接管理应用程序的媒体(图像,声音),读取并保存到SD卡。我应该改为使用MediaStore吗?我不太确定MediaStore的用途,并且javadoc并不是很有帮助。

应用何时应使用MediaStore?简要概述MediaStore的优缺点将不胜感激。

media android mediastore

5
推荐指数
1
解决办法
4784
查看次数

删除时未删除的文件仍显示在 Listview 中

我制作了一个程序,该程序使用存储在设备上的视频填充列表视图并播放它们。它还尝试使用 file.delete 函数来实现删除文件的功能。但是,使用 notifydatasetchange() 函数后,该文件仍显示在列表视图中。此外,我刚刚注意到视频文件已从 DCIM 文件夹中删除;但是,它显示在设备的图库中,但是当您单击它时,无法播放.. 这是我向用户显示对话框的部分代码,当用户单击 Yes 时,然后执行删除功能。

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    switch (which){
                    case DialogInterface.BUTTON_POSITIVE:

                         file.delete();
                         adapter.notifyDataSetChanged();
                         //list.setAdapter(adapter);
                         break;

                    case DialogInterface.BUTTON_NEGATIVE:
                        image2.setImageResource(R.drawable.play);
                        flag.setText("play");
                        //No button clicked
                        break;
                    }
                }
            };

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage("This Item will be Deleted\nAre you sure?").setPositiveButton("Yes", dialogClickListener)
                .setNegativeButton("No", dialogClickListener).show();


        }// else closes 
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会这样。有什么有用的建议请...

video android listview mediastore delete-file

5
推荐指数
1
解决办法
2436
查看次数

使用 MediaStore.Images 和 contentResolver 获取存储在设备上的图像时,“没有 content://media/external/images/media/0 条目”

我有一个非常基本的要求。我需要从我可以使用的设备相机中获取的最后一张图像(及其缩略图)。

我使用以下代码来获取图像缩略图:

String[] projection={MediaStore.Images.Thumbnails._ID,MediaStore.Images.Thumbnails.IMAGE_ID,
MediaStore.Images.Thumbnails.KIND,MediaStore.Images.Thumbnails.DATA};

Cursor cursor=MediaStore.Images.Thumbnails.queryMiniThumbnails(getContentResolver(),MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, MediaStore.Images.Thumbnails.MINI_KIND, projection);
Run Code Online (Sandbox Code Playgroud)

以下是实际图像:

String[] largeimage_projection={MediaStore.Images.ImageColumns._ID,MediaStore.Images.ImageColumns.DATA,};

String largeFileSort=MediaStore.Images.ImageColumns._ID+" DESC";

Cursor cursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, largeimage_projection, null, null, sort);
Run Code Online (Sandbox Code Playgroud)

但是,在我的 Samsung Galaxy Tab 8.9 上运行该应用程序时,出现以下错误:

对于缩略图:

没有内容条目://media/external/images/Thumnails/0

对于图像:

内容无条目://media/external/images/media/0

在检查设备时,我发现图像的默认位置是“/mnt/sdcard/DCIM/Camera/”

此外,我无法使用 onActivityResult() 方法中返回的“intent.getExtras()”,因为我的选项卡总是将其设为 null。

谁能告诉我我哪里出错了?谢谢。

android mediastore android-contentresolver

5
推荐指数
0
解决办法
5万
查看次数

是否可以使用Google Glass拍摄照片而无需"点击接受"?

我正在按照此处的代码使用Google Glass相机拍摄图像.

https://developers.google.com/glass/develop/gdk/media-camera/camera#capturing_images_or_video

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)

一切都运行正常,但相机活动要求用户"点击接受".大概一秒钟之后可以拍照吗?

这就是内置相机应用程序的工作原理,我只是说"好的玻璃,拍照",它拍摄的照片无需任何额外的确认.我的应用程序中的摄像头已经被用户激活,界面中有其他语音/点击,因此第二次确认点击是不合需要的.

camera mediastore google-glass

5
推荐指数
1
解决办法
1396
查看次数

为什么我无法从 MediaStore 获取视频时长?

在我的其中一台设备上,以下代码无法让我的视频出现在图库中:

File file = new File(path);
Uri uri = Uri.fromFile(file);
Intent scanFileIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
activity.sendBroadcast(scanFileIntent);
Run Code Online (Sandbox Code Playgroud)

所以我scanFile明确使用:

android.media.MediaScannerConnection.scanFile(activity, new String[]{file.getAbsolutePath()},
                new String[]{"video/" + mMimeType}, null);
Run Code Online (Sandbox Code Playgroud)

当我的视频为xxx.mpeg4时,值为mMimeTypemp4,结果是视频可以出现在MediaStore中,但是后面获取不到时长(返回值一直为0)。在这方面需要帮助。

public static long[] getVideoDetail(Context context, Uri uri) {
        long[] result = new long[] {DEFAULT_VIDEO_FRAME_WIDTH, DEFAULT_VIDEO_FRAME_HEIGHT, -1};
        if(uri == null || (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()))) {
            return result;
        }
            String[] projection = new String[] {MediaStore.Video.Media.RESOLUTION, MediaStore.Video.VideoColumns.DURATION};
            Cursor cursor = null;
            boolean success = false;
            try {
                cursor = context.getContentResolver().query(uri, projection, null, null, null); …
Run Code Online (Sandbox Code Playgroud)

android mediastore android-mediascanner

5
推荐指数
1
解决办法
2549
查看次数

如何正确保存到图片文件夹

我正在尝试将用户创建的位图保存到设备上的默认“图片”文件夹中。我将从似乎是更常见方法的选项开始:

public void saveImageToExternalStorage(String filename, Bitmap image) {
    String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
    try {
        File directory = new File(path);
        if (!directory.exists()) {
            directory.mkdirs();
        }

        File file = new File(directory, filename + ".jpeg");
        file.createNewFile();

        OutputStream outputStream = new FileOutputStream(file);
        image.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

        outputStream.flush();
        outputStream.close();
    } catch (IOException exception) {
        exception.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该保存到“图片”文件夹中,但Environment.getExternalStorageDirectory().getAbsolutePath()似乎创建了一个这样的新文件结构file://storage/emulated/11/Pictures/并将图片保存到那个文件夹中。我也试过Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)同样的结果。但这不是我的任何测试设备或模拟器上的默认“图片”文件夹。这让我寻找其他方法,我发现了这个:

public void saveImageToExternalStorage(String filename, Bitmap image) {
    try {
        ContentValues values = new ContentValues();
        values.put(MediaStore.Images.Media.TITLE, filename);
        values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); …
Run Code Online (Sandbox Code Playgroud)

android image bitmap save mediastore

5
推荐指数
1
解决办法
4736
查看次数

MediaStore - 修改日期无法正常工作

我从媒体商店中检索以下值

MediaStore.Images.Media.DATE_TAKEN
MediaStore.Images.Media.DATE_MODIFIED
Run Code Online (Sandbox Code Playgroud)

并从结果中读取日期,如下所示:

int dateTakenColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
int dateModifiedColumn = cursor.getColumnIndex(MediaStore.Images.Media.DATE_MODIFIED);
String dateToken  = cursor.getString(dateTakenColumn);
String dateModified = cursor.getString(dateModifiedColumn);
long lDateToken = dateToken != null ? Long.parseLong(dateToken) : 0;
long lDateModified = dateModified != null ? Long.parseLong(dateModified) : 0;
Run Code Online (Sandbox Code Playgroud)

并且可以看到以下行为(示例值):

  • lDateToken 如下所示:1450696995000 <= 正确
  • lDateModified 如下所示:1450696995 <= 错误

好像修改日期都被截断了。我用文件浏览器检查了真实文件的最后修改日期,这些值应该没问题,但我总是从我的媒体文件中得到这么短的数字。

关于为什么会发生这种情况的任何想法?

PS:检查了这个http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html,但修改后的字段没有在那里列出......

android mediastore

5
推荐指数
1
解决办法
2384
查看次数

将内容 URI 与 ACTION_VIDEO_CAPTURE 结合使用

我目前在我的文件提供程序上使用内容 URI 来检索ACTION_IMAGE_CAPTURE意图返回的相机图像。这工作正常。

出于某种奇怪的原因,尝试从相机检索视频文件时,相同的调用不起作用。

        destinationFile = File.createTempFile("video", ".mp4", this.getFilesDir());
        Uri uri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", destinationFile);

        Intent cameraIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        cameraIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
        cameraIntent.setClipData(ClipData.newRawUri(null, uri));
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(cameraIntent, ID);
Run Code Online (Sandbox Code Playgroud)

当目的返回时onActivityResult(),destinationFile 为空。

简单地替换MediaStore.ACTION_VIDEO_CAPTUREMediaStore.ACTION_IMAGE_CAPTURE给我预期的行为:所拍摄的图像保存在destinationFile。

这发生在 Nexus 设备和默认的 Google 相机应用程序上的库存 Android 6.0.1 上。

视频捕获真的不支持内容 URI 吗?我宁愿不在可公开访问的目录中使用文件 URI。

camera android video-capture mediastore android-fileprovider

5
推荐指数
1
解决办法
1183
查看次数

即使目标 Sdk 设置为 28,在 Android 10 上存储位图时应用程序也会崩溃?

我通过存储在 MediaStore 中将位图附加到 Imageview。它在 android 10 以下的所有设备上都可以正常工作,但是当像素发生崩溃时。我的 android id 定位到 sdk 28

try {
                Bitmap thePic = MediaStore.Images.Media.GetBitmap(ContentResolver, croppedPicUri);
                if(thePic != null){
                    imgProfileIcon.SetImageBitmap(thePic);

                //mediaStorageDir = Environment.GetExternalStoragePublicDirectory(Environment.DirectoryDcim);
                mediaStorageDir = GetExternalFilesDir(Environment.DirectoryPictures);
                if (!mediaStorageDir.Exists())
                {
                    mediaStorageDir.Mkdirs();
                }


                // Create a media file name
                String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").Format(new Java.Util.Date());
                sendFile = new File(mediaStorageDir.Path + File.Separator + "IMG_" + timeStamp + ".png");

                String path_ = MediaStore.Images.Media.InsertImage(this.ContentResolver, thePic, "Title", null);
                if (path_ != null){
                    Uri tempUri = Uri.Parse(path_);
                    path = GetPathToImage(tempUri);
                }
                }
            } catch …
Run Code Online (Sandbox Code Playgroud)

android mediastore xamarin.android xamarin

5
推荐指数
2
解决办法
2960
查看次数

通过 Android Media Store 在新文件夹中存储图像

我正在使用以下内容将在我的应用程序中创建的图像存储在 Android 库中:

    MediaStore.Images.Media.insertImage(contentResolver, bitmap, "SomeTitle", "Description");
Run Code Online (Sandbox Code Playgroud)

这会将图像存储在图片设备文件夹中并将它们添加到图库中。

我现在想为我的应用程序创建一个特定的图像文件夹,以便图像存储在文件夹“MyApp”而不是“Picture”中。我怎样才能做到这一点?

android image gallery mediastore

5
推荐指数
1
解决办法
2386
查看次数