Android Q读写共享目录媒体文件
Android Q读写共享目录媒体文件
有些人通过文件名称去查找共享目录下媒体文件却获取不到,可能是由于查询条件写错了。注意下MediaStore.Video.Media.DISPLAY_NAME 参数,我用MediaStore.Video.Media.BUCKET_DISPLAY_NAME这个就查询不到,具体这两个有什么不同,可以自己去查资料。
1.在共享目录中保存图片视频,下面给出的代码是保存图片,要保存视频就把MediaStore.Images改成MediaStore.Video就可以。
/*** 保存图片到共享目录,不用SAF存储* @param context* @param bitmap 图片bitmap* @param fileName 图片名称* @param mime_type 类型:图片为image/jpeg,视频为video/mpeg*/
public static boolean addPictureToAlbum(Context context, Bitmap bitmap, String fileName,String mime_type) {ContentValues contentValues = new ContentValues();contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);contentValues.put(MediaStore.Images.Media.DESCRIPTION, fileName);contentValues.put(MediaStore.Images.Media.MIME_TYPE, mime_type);Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);OutputStream outputStream = null;try {outputStream = context.getContentResolver().openOutputStream(uri);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);outputStream.close();} catch (Exception e) {e.printStackTrace();return false;}return true;
}
2.读取共享目录下的图片
/*** 读取共享目录下图片文件* @param context 上下文* @param filename 文件名称(带后缀a.jpg),是MediaStore查找文件的条件之一* @return*/public static List<InputStream> getImageFile(Context context, String filename) {String[] projection = {MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA,MediaStore.Images.Media.DATE_ADDED,MediaStore.Images.Thumbnails.DATA};List<InputStream> insList = new ArrayList<>();ContentResolver resolver = context.getContentResolver();String sortOrder = MediaStore.Images.Media.DATE_MODIFIED + " DESC";//根据日期降序查询String selection = MediaStore.Images.Media.DISPLAY_NAME + "='" + filename + "'"; //查询条件 “显示名称为?”Cursor cursor = resolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, null, sortOrder);if (cursor != null && cursor.moveToFirst()) {//媒体数据库中查询到的文件idint columnId = cursor.getColumnIndex(MediaStore.Images.Media._ID);do {//通过mediaId获取它的uriint mediaId = cursor.getInt(columnId);
// String tPath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA)); //获取图片路径Uri itemUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + mediaId );try {//通过uri获取到inputStreamContentResolver cr = context.getContentResolver();InputStream ins=cr.openInputStream(itemUri);insList.add(ins);} catch (FileNotFoundException e) {e.printStackTrace();}} while (cursor.moveToNext());}return insList;}
3.读取共享目录下的视频
/*** 读取共享目录下视频文件* @param context* @param filename 文件名称(带后缀a.mp4),是MediaStore查找文件的条件之一* @return*/public static List<InputStream> getVideoFile(Context context, String filename) {String[] projection = {MediaStore.Video.Media._ID,MediaStore.Video.Media.DATA,MediaStore.Video.Media.DATE_ADDED,MediaStore.Video.Thumbnails.DATA};List<InputStream> insList = new ArrayList<>();ContentResolver resolver = context.getContentResolver();String sortOrder = MediaStore.Video.Media.DATE_MODIFIED + " DESC";//根据日期降序查询String selection = MediaStore.Video.Media.DISPLAY_NAME + "='" + filename + "'"; //查询条件 “显示名称为?”Cursor cursor = resolver.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, selection, null, sortOrder);if (cursor != null && cursor.moveToFirst()) {//媒体数据库中查询到的文件idint columnId = cursor.getColumnIndex(MediaStore.Video.Media._ID);do {//通过mediaId获取它的uriint mediaId = cursor.getInt(columnId);
// String tPath = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA)); //获取图片路径Uri itemUri = Uri.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, "" + mediaId );try {//通过uri获取到inputStreamContentResolver cr = context.getContentResolver();InputStream ins=cr.openInputStream(itemUri);insList.add(ins);} catch (FileNotFoundException e) {e.printStackTrace();}} while (cursor.moveToNext());}return insList;}
Android Q读写共享目录媒体文件相关推荐
- linux 往共享目录写文件 权限,在 Linux 上给用户赋予指定目录的读写权限
在上篇文章中我们向您展示了如何在 Linux 上创建一个共享目录.这次,我们会为您介绍如何将 Linux 上指定目录的读写权限赋予用户. 有两种方法可以实现这个目标:第一种是 使用 ACL (访问控制 ...
- java下载文件夹_java如何通过共享目录下载文件夹(有子文件夹)到本地目录?...
有没有大神会操作的? 下面的代码只能下载文件夹下只是文件的,不能下载文件夹下包含子文件夹的文件public static void getShareFile(){ System.out.println ...
- Android:读取assets目录下文件(二)
在上篇博客里,介绍了如何读取assets目录下的txt文件.在这里,介绍如何读取xml文件. xml文件内容如下: <?xml version="1.0" encoding= ...
- android gradle 目录,Android Gradle:将目录列入文件
我正在尝试将ANT构建中的任务转换为Gradle: ${assets} 我想我还没有完全掌握基本的Gradle概念,但这是我尝试过的: task indexAssets << { def ...
- Android隐藏媒体文件,如何仅在Android中过滤相关的媒体文件?
我试图在手机中获取所有的音乐文件: 为此我使用: String[] STAR = {"*"}; Uri allExternalSongUri = MediaStore.Audio. ...
- Android Q私有目录与公共目录文件的交互(读取,复制,保存等)——Pittkai
Android Q即将推出正式版,本文是基于Q接近最终版本的beta6版本作为记录写的,如果对看到本文的人有帮助那当然是更好了. 一.Android Q的私有目录 ...
- java安全编码指南之:文件和共享目录的安全性
文章目录 简介 linux下的文件基本权限 linux文件的特殊权限 Set UID 和 Set GID Sticky Bit SUID/SGID/SBIT权限设置 文件隐藏属性 特殊文件 java中 ...
- Smb协议实现内网共享目录文件处理及踩坑记录
Smb协议实现内网共享目录文件处理及踩坑记录 一.业务场景 公司内网环境,有部分比较古老的业务数据保存在一台windows服务器的共享目录里面.现在需要操作这个windows服务器的共享目录来上传下载 ...
- 适配Android Q指南
一 .行为变更:所有应用 Android Q 平台包含一些行为变更,这些变更可能会影响您的应用.以下行为变更将影响在 Android Q 上运行的所有应用,无论其采用哪种 targetSdkVersi ...
最新文章
- PyCharm使用笔记
- Oracle 11g 错误:ORA-28002: the password will expire within 7 days 解决方法
- EntityFramework之原始查询及性能优化(六)
- Android:如何使用addJavaScriptInterface
- Express使用http-proxy-middleware
- bzoj3715 [PA2014]Lustra
- Nginx命令配置到系统环境
- 通过延迟加载和代码拆分提高网站性能
- bzoj1925地精部落——数学
- 为什么我们要使用min-height和max-height样式属性?
- django进阶03静态文件和模板
- java编程线板切割问题_坑爹的日志无法按天切割问题!
- pytorch导入模型
- 2018 CISSP考试一路走来
- easyui Datagrid的deleteRow多行移除问题
- HTML无法显示下一页,为何我的浏览器不能直接打开下一页
- 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
- CLUSTER 05: 块存储应用案例 分布式文件系统 对象存储
- 华为路由器选型及应用
- C中printf的输出格式类型和%g的用法