文章目录 一、动态权限申请 二、MediaStore 操作文件 三、完整代码示例 1、MainActivity 核心代码 2、build.gradle 构建脚本 3、清单文件 五、相关文档资料 特别注意...操作文件 ---- 在 Android 11 之后 , 不能使用 File 进行文件操作 , 需要使用 MediaStore 进行文件操作 , MediaStore 的如下内部类 Files ,...下的 Images 内部类 , 负责 Pictures 下的文件操作 ; package android.provider; public final class MediaStore {...}/hello") // 设置文件名称 contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "hello.txt")...}/hello") // 设置文件名称 contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "hello.txt")
MediaStore,本质上是 Android 维护的一个文件系统的数据库,它记录了当前磁盘上所有的文件索引,我们可以通过它,快速的查找当前系统的文件。...MediaStore 刷新的时机是不一定的,也就是说,保存、删除、重命名 的一张图片文件,MediaStore 并不会立即刷新文件系统,将此文件索引记录下来。...而系统本身是存在一些自动刷新 MediaStore 的时机,例如:重启手机。...表现就是,当你保存了一张图片到本地文件夹中之后,通过文件管理器类的 App,可以在目录下找到这涨照片,但是在系统相册中,是无法立即看到它的, 所以在我们保存、删除、操作文件之后,去触发系统刷新 MediaStore...刷新删除的文件 notifyLocalMedia(file.getPath()); //通知MediaStore刷新重命名的文件 updateGallery(f2.getPath()); 删除文件 for
_ID, MediaStore.Audio.Media.DISPLAY_NAME, MediaStore.Audio.Media.TITLE, MediaStore.Audio.Media.DURATION..., MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM, MediaStore.Audio.Media.YEAR, MediaStore.Audio.Media.MIME_TYPE..._ID, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.MIME_TYPE..._ID, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.MIME_TYPE..._ID, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.TITLE, MediaStore.Images.Media.MIME_TYPE
文章目录 一、报错信息 二、解决方案 Android 低版本系统中不能使用分区存储方式管理文件 ; 一、报错信息 ---- 在 Android 9 版本中使用 MediaStore 进行分区存储 ;...// 设置插入 external.db 数据库中的 files 数据表的各个字段的值 // 设置存储路径 , files 数据表中的对应 relative_path 字段在 MediaStore...中以常量形式定义 contentValues.put(MediaStore.Downloads.RELATIVE_PATH, "${Environment.DIRECTORY_DOWNLOADS...}/hello") // 设置文件名称 contentValues.put(MediaStore.Downloads.DISPLAY_NAME, "hello.txt")...// 设置文件标题, 一般是删除后缀, 可以不设置 contentValues.put(MediaStore.Downloads.TITLE, "hello")
扫描依然是使用 query MediaStore 的方式。一句话介绍 MediaStore,MediaStore 就是Android系统中的一个多媒体数据库。..._ID, MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE, MediaStore.Video.Media.MIME_TYPE..., MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DATE_ADDED..., MediaStore.Video.Media.DURATION, MediaStore.Video.Media.WIDTH, MediaStore.Video.Media.HEIGHT...(MediaStore.Video.Media.
MediaStore API 新增的方法 ? 系统在调用以上任何一个方法后,会构建一个 PendingIntent 对象。...性能:通过 File () 等直接通过路径访问的 API 实际上也会映射为MediaStore API 。...媒体集 1) 查询媒体集(需要 READ_EXTERNAL_STORAGE 权限) 实际上 MediaStore 是以前就有的 API ,不同的是过去主要通过 MediaStore.Video.Media..._ID, MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.SIZE...{ put(MediaStore.Audio.Media.DISPLAY_NAME, "My Workout Playlist.mp3") put(MediaStore.Audio.Media.IS_PENDING
)); // 歌曲名 String album = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM)); // 专辑...(MediaStore.Audio.Media....path = c.getString(c.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));// 路径 if (!..., null, MediaStore.Images.Media.MIME_TYPE + "= ?...or " + MediaStore.Images.Media.MIME_TYPE + "= ?"
(MediaStore.MediaColumns.SIZE, 215454); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3");...values.put(MediaStore.Audio.Media.ARTIST, "Madonna"); values.put(MediaStore.Audio.Media.DURATION..., 230); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION..., false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC..., false); //Insert it into the databaseUri Uri uri = MediaStore.Audio.Media.getContentUriForPath(
; String[] projImage = { MediaStore.Images.Media...._ID , MediaStore.Images.Media.DATA ,MediaStore.Images.Media.SIZE ,MediaStore.Images.Media.DISPLAY_NAME...or " + MediaStore.Images.Media.MIME_TYPE + "=?"..., new String[]{"image/jpeg", "image/png"}, MediaStore.Images.Media.DATE_MODIFIED+" desc"); if(mCursor...= mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME)); //用于展示相册初始化界面 if(
文章目录 一、分区存储模式下使用 MediaStore 插入图片 二、分区存储模式下使用 MediaStore 查询图片 三、相关文档资料 Android 分区存储系列博客 : 【Android 文件管理...文件操作 ) 一、分区存储模式下使用 MediaStore 插入图片 ---- 在上一篇博客 【Android 文件管理】分区存储 ( MediaStore 文件操作 ) 中 , 创建了一个文本文件...其次 , 构造插入数据库的 ContentValues 数据结构 , 设置的 “external.db” 数据库中的 “files” 数据表的各个字段与 MediaStore 中的常量对应关系如下 :...MediaStore.Downloads.RELATIVE_PATH : relative_path MediaStore.Downloads.DISPLAY_NAME : display_ame MediaStore.Downloads.TITLE...contentValues.put(MediaStore.Downloads.TITLE, "image") // 设置 MIME_TYPE contentValues.put(MediaStore.Downloads.MIME_TYPE
答案是可以的,sdk还提供了这样一个方法: MediaStore.Images.Media.insertImage(getContentResolver(), "image path", "title"... values.put(MediaStore.Images.ImageColumns.DISPLAY_NAME, mImageFileName); ...values.put(MediaStore.Images.ImageColumns.DATE_TAKEN, mImageTime); values.put(MediaStore.Images.ImageColumns.DATE_ADDED..., dateSeconds); values.put(MediaStore.Images.ImageColumns.DATE_MODIFIED, dateSeconds);...(MediaStore.Images.ImageColumns.WIDTH, mImageWidth); values.put(MediaStore.Images.ImageColumns.HEIGHT
()) { String path = c.getString(c.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));//...)); // 作者 long size = c.getLong(c.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));//...int time = c.getInt(c.getColumnIndexOrThrow(MediaStore.Audio.Media...., null, MediaStore.Images.Media.MIME_TYPE + "= ?...or " + MediaStore.Images.Media.MIME_TYPE + "= ?"
文章目录 一、分区存储模式下使用 MediaStore 修改图片 二、分区存储模式下使用 MediaStore 删除图片 三、相关文档资料 Android 分区存储系列博客 : 【Android 文件管理...应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 ) 【Android 文件管理】分区存储 ( 分区存储机制 和 文件索引数据 ) 【Android 文件管理】分区存储 ( MediaStore...MediaStore 修改图片 ---- 将 /sdcard/Pictures/image/ 目录下的 image.jpg 修改为 image_update.jpg ; 分区存储机制中 , 删除图片文件..., 不能通过获取其绝对路径进行删除 , 必须先使用 MediaStore 查询到图片文件的 Uri , 然后通过 Uri 执行 删除 / 修改 图片文件的操作 ; 查询图片 : 查询图片文件的具体原理参考..., // 指定要查询的列 null, // 指定查询语句 "${MediaStore.Images.Media.DISPLAY_NAME}
340); intent.putExtra("outputY", 340); //将URI指向相应的file:///… intent.putExtra(MediaStore.EXTRA_OUTPUT..., selectionArgs); } } else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore...This is useful for * MediaStore Uris, and other file-based ContentProviders...., selectionArgs); } } else if ("content".equalsIgnoreCase(uri.getScheme())) {// MediaStore...This is useful for * MediaStore Uris, and other file-based ContentProviders.
, uri); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(intent, 0); 2、调用系统录音...Intent intent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); startActivityForResult(intent..., 1); 3、调用系统录像 Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY..., 0.5);//画质0.5 intent.putExtra(android.provider.MediaStore.EXTRA_SIZE_LIMIT,768000); intent.putExtra(...MediaStore.EXTRA_DURATION_LIMIT, 70000);//70s File file = new File("/mnt/sdcard/video"); if (!
访问公共目录 MediaStore Uri和路径对应表 Uri-path.png MediaStore提供下列Uri,可以用MediaProvider查询对应的Uri数据。...解决方法1: 参见使用MediaStore访问公共目录和使用SAF选择单个文件,使用MediaStore接口访问公共目录中的多媒体文件,或者使用 SAF访问公共目录中的任意文件。...问题原因2: 使用MediaStore接口访问非多媒体文件。 问题分析2: 在Android Q上,使用MediaStore接口只能访问公共目录中的多媒体文件。...解决方案: APP应该将想要保留的文件通过MediaStore接口保存到公共目录下,请参见使用MediaStore访问公共目录。...MediaStore 文件增加Pending状态 AndroidQ上,MediaStore中添加MediaStore.Images.Media.IS_PENDING ,flag用来表示文件的Pending
通过MediaStore对象可以访问相关数据。 闲话少说,直接看例子,这是一本英文书上的,觉得写的很好,自己翻译了一下,并加入了很多注释。以备查询。...* Android提供了MediaStore类,该类是一个ContentProvider,管理着设备上自带的和外部的多媒体文件, * 同时包含着每一个多媒体文件的数据信息。...* 为了将数据存储在多媒体库,使用ContentResolver对象来操纵MediaStore对象 * 在MediaStore.Images.Media中有两个URI常量,一个是 EXTERNAL_CONTENT_URI...是我们希望这条记录被创建时包含的数据信息 //这些数据的名称已经作为常量在MediaStore.Images.Media中,有的存储在MediaStore.MediaColumn中了 //ContentValues..., "testing"); values.put(MediaStore.Images.Media.DESCRIPTION, "this is description"); values.put(MediaStore.Images.Media.MIME_TYPE
, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media...._ID, MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME}; Cursor...imageCursor = mContext.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,..., fileName); values.put(MediaStore.Downloads.MIME_TYPE, "application/vnd.android.package-archive");...(MediaStore.Images.Media.MIME_TYPE, "image/png"); values.put(MediaStore.Images.Media.TITLE, "Image.png
_ID, MediaStore.Images.Media.BUCKET_ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME..., MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN,...MediaStore.Images.Media.ORIENTATION, MediaStore.Images.Thumbnails.DATA };..., "", null, MediaStore.Images.Media.DATE_TAKEN + " DESC");//按时间倒序获取图片...int bucketNameColumn = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);//获得图片目录名称在
2、这些文件位于以下其中一个明确定义的媒体集合中: 照片:存储在 MediaStore.Images 中。 视频:存储在 MediaStore.Video 中。...音乐文件:存储在 MediaStore.Audio 中。...要访问此类文件,应用必须使用 MediaStore.openFile() 等方法。...有时我们要在卸载后保留这些文件,请将其保存到 MediaStore 中的某个目录下。...在 MediaStore 对象中调用setRequireOriginal(),在调用时传入照片的 URI。
领取专属 10元无门槛券
手把手带您无忧上云