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读写共享目录媒体文件相关推荐

  1. linux 往共享目录写文件 权限,在 Linux 上给用户赋予指定目录的读写权限

    在上篇文章中我们向您展示了如何在 Linux 上创建一个共享目录.这次,我们会为您介绍如何将 Linux 上指定目录的读写权限赋予用户. 有两种方法可以实现这个目标:第一种是 使用 ACL (访问控制 ...

  2. java下载文件夹_java如何通过共享目录下载文件夹(有子文件夹)到本地目录?...

    有没有大神会操作的? 下面的代码只能下载文件夹下只是文件的,不能下载文件夹下包含子文件夹的文件public static void getShareFile(){ System.out.println ...

  3. Android:读取assets目录下文件(二)

    在上篇博客里,介绍了如何读取assets目录下的txt文件.在这里,介绍如何读取xml文件. xml文件内容如下: <?xml version="1.0" encoding= ...

  4. android gradle 目录,Android Gradle:将目录列入文件

    我正在尝试将ANT构建中的任务转换为Gradle: ${assets} 我想我还没有完全掌握基本的Gradle概念,但这是我尝试过的: task indexAssets << { def ...

  5. Android隐藏媒体文件,如何仅在Android中过滤相关的媒体文件?

    我试图在手机中获取所有的音乐文件: 为此我使用: String[] STAR = {"*"}; Uri allExternalSongUri = MediaStore.Audio. ...

  6. Android Q私有目录与公共目录文件的交互(读取,复制,保存等)——Pittkai

    Android Q即将推出正式版,本文是基于Q接近最终版本的beta6版本作为记录写的,如果对看到本文的人有帮助那当然是更好了.                一.Android Q的私有目录     ...

  7. java安全编码指南之:文件和共享目录的安全性

    文章目录 简介 linux下的文件基本权限 linux文件的特殊权限 Set UID 和 Set GID Sticky Bit SUID/SGID/SBIT权限设置 文件隐藏属性 特殊文件 java中 ...

  8. Smb协议实现内网共享目录文件处理及踩坑记录

    Smb协议实现内网共享目录文件处理及踩坑记录 一.业务场景 公司内网环境,有部分比较古老的业务数据保存在一台windows服务器的共享目录里面.现在需要操作这个windows服务器的共享目录来上传下载 ...

  9. 适配Android Q指南

    一 .行为变更:所有应用 Android Q 平台包含一些行为变更,这些变更可能会影响您的应用.以下行为变更将影响在 Android Q 上运行的所有应用,无论其采用哪种 targetSdkVersi ...

最新文章

  1. PyCharm使用笔记
  2. Oracle 11g 错误:ORA-28002: the password will expire within 7 days 解决方法
  3. EntityFramework之原始查询及性能优化(六)
  4. Android:如何使用addJavaScriptInterface
  5. Express使用http-proxy-middleware
  6. bzoj3715 [PA2014]Lustra
  7. Nginx命令配置到系统环境
  8. 通过延迟加载和代码拆分提高网站性能
  9. bzoj1925地精部落——数学
  10. 为什么我们要使用min-height和max-height样式属性?
  11. django进阶03静态文件和模板
  12. java编程线板切割问题_坑爹的日志无法按天切割问题!
  13. pytorch导入模型
  14. 2018 CISSP考试一路走来
  15. easyui Datagrid的deleteRow多行移除问题
  16. HTML无法显示下一页,为何我的浏览器不能直接打开下一页
  17. 音频信号输入itc服务器,音频信号的两种传输方式,你知多少?
  18. CLUSTER 05: 块存储应用案例 分布式文件系统 对象存储
  19. 华为路由器选型及应用
  20. C中printf的输出格式类型和%g的用法

热门文章

  1. 西班牙的计算机水平如何,西班牙人的真实英语水平是欧洲国家中最差的吗?
  2. Revit二次开发-查找户型外墙
  3. Vux Rater赋值问题
  4. 没钱看病?别怕,有医保!
  5. EBS GL表结构学习(转)
  6. 英语语法总结---三、英语中三个特殊句式是哪三个
  7. 增值电信服务费是什么意思_中国移动的增值业务费是什么意思
  8. U3D_关于UI中的锚点
  9. 使用EDI与SAP集成的解决方案
  10. 性能优化(四)长图优化,仿微博加载长图方式