标签: mediastore

如何限制用户仅从Android的MediaStore中挑选照片?

我希望用户能够从他们的媒体库中选择一张照片,但不希望他们能够选择一个视频.我无法限制他们只选择照片.当我使用打开图库应用程序时

new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
Run Code Online (Sandbox Code Playgroud)

然后他们可以选择照片和视频.有没有办法限制他们只选择照片?

video android photo mediastore

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

在查询Genres.Members.EXTERNAL_CONTENT_URI的专辑

我有兴趣对特定类型的所有专辑进行查询.通过使用Android,可以轻松地对特定艺术家的专辑执行类似的查询MediaStore.Audio.Artists.Albums.getContentUri,但就查询类型而言,MediaStore.Audio.Genres.Members.getContentUri是提供的最佳方式,但这用于从类型中返回歌曲.

您可以在执行Genres.Members查询后轻松返回每个类型成员的MediaStore.Audio.Genres.Members.ALBUM相册名称,然后使用,返回相册名称,但这仅在您显示歌曲时才有用.

是否有某些选择我只能从一个类型中返回专辑,或者也许是Uri我可以使用的特殊专辑?我没有找到任何关于此的文档,所以如果有任何人有任何信息,将非常感谢.

java android mediastore

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

ACTION_IMAGE_CAPTURE后Android图库未更新

MediaStore.ACTION_IMAGE_CAPTURE用来拍照,MediaStore.EXTRA_OUTPUT指向Uri存储所有其他照片/视频文件的 DCIM/Camera 目录。

照片文件已成功拍摄,我可以使用 ES 文件资源管理器查看它,并且可以在我的应用程序中查看它。但是当我使用它时它没有显示在画廊中Intent.ACTION_PICK

Intent selectPictureIntent = new Intent(Intent.ACTION_PICK);
        selectPictureIntent.setType("image/*");
Run Code Online (Sandbox Code Playgroud)

我已经阅读了有关在图片使用后更新图库的其他主题

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
                 Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)

并且

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, _outputMediaUri);     
        LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);
Run Code Online (Sandbox Code Playgroud)

这里发生了什么 :(

java android photo mediastore android-intent

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

更新android mediastore中的专辑封面?

我想将我的图像设置为音频mp3文件的专辑封面.我知道相册id,当我更新时,应用程序抛出java.lang.UnsupportedOperationException.

这是我的更新代码..

ContentValues values_art=new ContentValues();

values_art.put(MediaStore.Audio.AlbumColumns.ALBUM_ART, img_path);

int b=getContentResolver().update(MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, values_art,MediaStore.Audio.Albums.ALBUM_ID + "=?", new String[]{album_id});

if(b !=0){
    Toast.makeText(getApplicationContext(), "Successfuly Image Updated", Toast.LENGTH_LONG).show();
}
else{
    Toast.makeText(getApplicationContext(), "Not Image Updated", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)

我的Logcat:

05-11 00:14:33.063: E/AndroidRuntime(4046): FATAL EXCEPTION: main
05-11 00:14:33.063: E/AndroidRuntime(4046): java.lang.UnsupportedOperationException: Unknown or unsupported URL: content://media/external/audio/albums
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:169)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.content.ContentProviderProxy.update(ContentProviderNative.java:507)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.content.ContentResolver.update(ContentResolver.java:1022)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at fsoft.farhad.mediaeditor.AudioTabActivity$4.onClick(AudioTabActivity.java:89)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.view.View.performClick(View.java:4212)
05-11 00:14:33.063: E/AndroidRuntime(4046):     at android.view.View$PerformClick.run(View.java:17476) …
Run Code Online (Sandbox Code Playgroud)

java android mediastore android-contentprovider

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

使用 MediaStore android 重命名图像

使用file.renameTo(file)它们重命名图像后,它们在图库中变灰并变得不可用。我尝试了各种 Intent 来重新扫描图像,最后没有希望,一些旧版本的工作有些根本不起作用,所以我正在尝试更新MediaStore,但不知道如何正确地做到这一点。

这是我的一些代码

这是我早期的方法之一

MediaScannerConnection.scanFile(mContext,
                    filesPath , null,
                    new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                }
            });
Run Code Online (Sandbox Code Playgroud)

另一个

private void scanMedia(File file) {

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

这项工作适用于 19 岁之前,但不适用于 kitkat

mContext.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://" + Environment.getExternalStorageDirectory())));
Run Code Online (Sandbox Code Playgroud)

这是 MediaStore 之一

int row = mContext.getContentResolver()
                        .update(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        valuesNewFilePath,
                        MediaStore.MediaColumns.DATA + "='" + oldFilePath + …
Run Code Online (Sandbox Code Playgroud)

android rename mediastore android-mediascanner

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

MediaStore.Images.Media.insertImage 在某些设备中返回 null

可能重复但没有找到任何解决方案。

我正在尝试修改图像并将其保存到设备使用MediaStore. 使用以下代码 -:

public class Utils {

    private Utils() {

    }

    static Uri getUri(Context context, Bitmap bitmap) {
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, "Title", null); //returning null in some devices
        Log.d("TAG", "getUri: "+path);
        return Uri.parse(path);   //this is returning null which cause the app crash
    }

    static Bitmap getBitmap(Context context, Uri uri) throws IOException {
        return MediaStore.Images.Media.getBitmap(context.getContentResolver(), uri);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码在大多数设备中运行良好,但问题是MediaStore.Images.Media.insertImage在某些设备中返回 null,例如 -:

1 . 三星J7(2016)

2 . …

java android mediastore

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

我们还应该使用 MediaStore.Images.Media.insertImage() 方法吗?

我看到很多关于在 android 中将图像保存到图库的讨论,我想知道 MediaStore 是否仍然是一个好的继续方式?

谢谢,

android mediastore

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

Android 10 MediaStore API 更改

Uri uri = MediaStore.Audio.Artists.Albums.getContentUri("external", 
artistId);

String[] projection = new String[] {BaseColumns._ID};

Cursor cursor = 
mContext.getApplicationContext().getContentResolver().query
(uri,
projection,
null,
null,
null);
Run Code Online (Sandbox Code Playgroud)

在 Android 10 之前,BaseColumns._ID 返回专辑 ID,现在在 10 中,它返回一些随机 ID。

当我将投影传递为 null 并检索下面的所有列名时,我得到的列名。这是在 Android 10 中。 [numsongs、artist、numsongs_by_artist、album、album_art、album_key、artist_id、maxyear、minyear、album_id]

Android 10 以下没有 _id 列。

要获得 10 中的专辑 ID,我必须使用以下投影

String[] projection = new String[] 
{MediaStore.Audio.Artists.Albums.ALBUM_ID};
Run Code Online (Sandbox Code Playgroud)

对于下面相同的 Uri 是我在 Android 10 以下获得的可用列。 [album_art、maxyear、minyear、artist、album、artist_key、numsongs_by_artist、_id、numsongs、album_key、artist]

这里没有专辑_id 列,_id 返回专辑_id。现在在 10 中是不可用的。

现在我需要使用不同的代码来获取专辑 ID,一个用于 Android 10,另一个用于低于 Android 10。

这些变化在 Android 10 行为变化中没有列出。这对我们来说是非常关键的变化,像这样的一个小变化可能会破坏我们每天有 150 万人使用的整个应用程序。

怎么会有人像这样改变而不让开发人员知道呢?(或)我在文档中遗漏了什么。(或)如何跟踪这些更改?

android mediastore android-music-player android-contentprovider android-10.0

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

如何使用 JAVA 在 Android 10 及更高版本的媒体商店中保存 pdf 文件?

更新:

为了保存PDF文件:

在下面的答案部分。

为了保存位图文件:

@RequiresApi(api = Build.VERSION_CODES.Q)
@NonNull
private Uri saveBitmap(@NonNull final Context context, @NonNull final Bitmap bitmap,
                       @NonNull final Bitmap.CompressFormat format, @NonNull final String mimeType,
                       @NonNull final String displayName, @Nullable final String subFolder) throws IOException {
    String relativeLocation = Environment.DIRECTORY_PICTURES;

    if (!TextUtils.isEmpty(subFolder)) {
        relativeLocation += File.separator + subFolder;
    }

    final ContentValues contentValues = new ContentValues();
    contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, displayName);
    contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
    contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);

    final ContentResolver resolver = context.getContentResolver();

    OutputStream stream = null;
    Uri uri = null;

    try {
        final Uri contentUri …
Run Code Online (Sandbox Code Playgroud)

java pdf mediastore android-external-storage scoped-storage

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

如何通过 CameraX 中的 Mediastore 保存到 Media 文件夹?

我还是 android 编程的新手。我正在尝试使用 CameraX API 拍照。但是,Google Codelabs的示例代码仅将照片保存在符合Android 的 Scoped Storage的应用程序私有目录中。我对 Mediastore 还不了解,所以请您带我查看有关如何将 Mediastore 集成到 CameraX 的文档吗?

android mediastore android-camerax

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