类 MediaStoreUtil
- java.lang.Object
-
- com.ts.lib.common.util.MediaStoreUtil
-
public final class MediaStoreUtil extends Object
APP 工具类。- 分区存储
- MediaStore API
- 作者:
- Li Junchao
- 另请参阅:
- Android 10(Q)/11(R) 分区存储适配
-
-
字段概要
字段 修饰符和类型 字段 说明 static StringDIRstatic intREQUEST_DELETE_CODE
-
方法概要
所有方法 静态方法 具体方法 已过时的方法 修饰符和类型 方法 说明 static booleancopyFile(String oldPath, OutputStream out)从指定文件path向一个 输出流OutputStream输出,实现 copystatic voidcopyPrivateToSharedStorage(Context context, String mimeType, String orgFilePath, String appDir, String displayName)复制沙盒私有文件到公共存储目录下static booleandelete(Activity context, Uri uri)当启用了 分区存储 ,无权限删除 给定的 RowUri时,会 启用Activity.startIntentSenderForResult(IntentSender, int, Intent, int, int, int)发起请求权限,requestCode 为REQUEST_DELETE_CODE,后面的流程需自行接管处理static Uriexist(Context context, String mimeType, String appDir, String fileName)Android Q及以上,判断在MediaStore中,文件是否已存在static UriexistV28(Context context, String mimeType, String filePath)Android Q以下版本,查询媒体库中当前路径是否存在static FilegetAppSpecificAlbumStorageDir(Context context, String... appDirs)媒体内容,应用专属外部存储Picture目录static FilegetAppSpecificMovieStorageDir(Context context, String... appDirs)媒体内容,应用专属Movie目录static FilegetAppSpecificMusicStorageDir(Context context, String... appDirs)应用专属外部存储music目录static FilegetAppSpecificStorageDir(Context context, String dirType, String... appDirs)创建一个应用专属外部存储空间下的自定义的目录,无需任何权限,卸载时移除 外部存储空间Context.getExternalFilesDir(String)Context.getExternalCacheDir()static ContentValuesgetImageContentValues(File paramFile, long paramLong)获取 图片 ContentValuestatic List<InputStream>getImageIns(Context context, String name)name是文件名称,是MediaStore查找文件的条件之一static Pair<Uri,String>getSharedExternalUri(String mimeType)获取共享存储对应 mimeType 的目录Uri和 系统标准目录 比如:mimeType = "image/jpeg" first:MediaStore.Images.Media.EXTERNAL_CONTENT_URIsecond:Environment.DIRECTORY_PICTURESstatic FilegetSharedStorageAppDir(Context context, String standardDir, String appDir)创建或获取外部共享存储目录static StringgetSubPackageNameAsDir(Context context)截取包名的最后一级目录,SDK作为不同APP创建目录的区分static ContentValuesgetVideoContentValues(File paramFile, long paramLong)获取视频 contentValuestatic StringgetVideoPath(Context context, Uri uri)static voidinsertExistFileIntoMediaStore(Context context, String title, String filePath, String mimeType)把一个已存在的媒体文件插入媒体库static UriinsertNewFile(Context context, String mimeType, String appDir, String fileName)在MediaStore里插入一条记录,当前文件还未写入static booleansaveImgToSystemAlbum(Context context, String imageFile)将图片保存到系统图库static booleansaveVideoToSystemAlbum(Context context, String videoFile)将视频保存到系统图库static voidscanMedia(Context context, String filePath, String mimeType)执行媒体扫描,添加到媒体库static voidscopeStorage(Context context, String filePath, String mimeType)已过时。static voidtriggerScanMediaStore(Context context, Uri fileUri, String filePath)触发扫描媒体库
-
-
-
方法详细资料
-
insertNewFile
public static Uri insertNewFile(@NonNull Context context, @NonNull String mimeType, @Nullable String appDir, @NonNull String fileName)
在MediaStore里插入一条记录,当前文件还未写入- 参数:
context-ContextmimeType- 文件类型,用来判别保存在什么目录下,请确保正确。比如: image/png、video/mp4appDir- 自定义app的专属目录,如果为null,则在公共目录下以app的packageName作为app专属目录fileName- 文件名- 返回:
Uri-ContentResolver.insert(Uri, ContentValues)
-
exist
public static Uri exist(Context context, String mimeType, String appDir, String fileName)
Android Q及以上,判断在MediaStore中,文件是否已存在
-
triggerScanMediaStore
public static void triggerScanMediaStore(Context context, @NonNull Uri fileUri, @Nullable String filePath)
触发扫描媒体库
-
getSharedExternalUri
public static Pair<Uri,String> getSharedExternalUri(String mimeType)
获取共享存储对应 mimeType 的目录Uri和 系统标准目录- 比如:mimeType = "image/jpeg"
- first:
MediaStore.Images.Media.EXTERNAL_CONTENT_URI - second:
Environment.DIRECTORY_PICTURES
- 参数:
mimeType- 文件 mime type,例如 : audio/mp3、video/mp4、image/png- 返回:
Pair- first: uri table second:系统标准目录Environment.DIRECTORY_MOVIES……
-
getImageIns
public static List<InputStream> getImageIns(Context context, String name)
name是文件名称,是MediaStore查找文件的条件之一- 参数:
context-Contextname- 文件名- 返回:
- List
-
-
copyPrivateToSharedStorage
public static void copyPrivateToSharedStorage(@NonNull Context context, @NonNull String mimeType, @NonNull String orgFilePath, @Nullable String appDir, @Nullable String displayName)
复制沙盒私有文件到公共存储目录下- 参数:
context-ContextmimeType- 文件的 mime typeorgFilePath- 是要复制的文件私有目录路径appDir- APP私有目录displayName- 复制后文件要显示的文件名称带后缀(如xx.txt)
-
getImageContentValues
public static ContentValues getImageContentValues(File paramFile, long paramLong)
获取 图片 ContentValue- 参数:
paramFile-FileparamLong- 时间- 返回:
ContentValues
-
saveImgToSystemAlbum
public static boolean saveImgToSystemAlbum(Context context, String imageFile)
将图片保存到系统图库- 参数:
context-ContextimageFile- 有效的文件路径
-
getVideoContentValues
public static ContentValues getVideoContentValues(File paramFile, long paramLong)
获取视频 contentValue- 参数:
paramFile- 视频文件路径paramLong- 时间System.currentTimeMillis()- 返回:
ContentValues
-
saveVideoToSystemAlbum
public static boolean saveVideoToSystemAlbum(Context context, String videoFile)
将视频保存到系统图库- 参数:
context-ContextvideoFile- 有效的 video file path
-
getSubPackageNameAsDir
public static String getSubPackageNameAsDir(Context context)
截取包名的最后一级目录,SDK作为不同APP创建目录的区分- 参数:
context- Context- 返回:
- String 包名的最后一级目录,可能为 null
-
getAppSpecificStorageDir
@Nullable public static File getAppSpecificStorageDir(Context context, String dirType, String... appDirs)
创建一个应用专属外部存储空间下的自定义的目录,无需任何权限,卸载时移除Note: 在 Android 11(API 级别 30)及更高版本中,应用无法在外部存储设备上创建自己的应用专用目录
- 参数:
context-ContextdirType- 必须为Environment.DIRECTORY_MOVIESorEnvironment.DIRECTORY_PICTURES指定的目录appDirs- 变长参数的每个元素都是一级目录- 返回:
File- 最终创建目录
-
getAppSpecificMovieStorageDir
@Nullable public static File getAppSpecificMovieStorageDir(Context context, String... appDirs)
媒体内容,应用专属Movie目录
-
getAppSpecificAlbumStorageDir
@Nullable public static File getAppSpecificAlbumStorageDir(Context context, String... appDirs)
媒体内容,应用专属外部存储Picture目录
-
getAppSpecificMusicStorageDir
@Nullable public static File getAppSpecificMusicStorageDir(Context context, String... appDirs)
应用专属外部存储music目录
-
getSharedStorageAppDir
@Nullable public static File getSharedStorageAppDir(@NonNull Context context, @NonNull String standardDir, @Nullable String appDir)
创建或获取外部共享存储目录- 参数:
context-ContextstandardDir- 系统定义的标准目录,比如:Environment.DIRECTORY_MOVIESappDir- 自定义 app 的 私有 目录,以便不同的APP之间的区分,如果为null,则使用APP的packageName- 返回:
File- 另请参阅:
- https://www.jianshu.com/p/bc50128860c8
-
scanMedia
public static void scanMedia(@NonNull Context context, @NonNull String filePath, @Nullable String mimeType)
执行媒体扫描,添加到媒体库- 参数:
context-ContextfilePath- 要扫描的文件路径mimeType- 媒体类型
-
insertExistFileIntoMediaStore
public static void insertExistFileIntoMediaStore(@NonNull Context context, @Nullable String title, @NonNull String filePath, @NonNull String mimeType)
把一个已存在的媒体文件插入媒体库- 参数:
context-Contexttitle- 可为null or 空字符串,如果为空,则以 "ts-" + fileName作为 titlefilePath- 文件路径mimeType- "video/mp4","audio/mp3","image/jpg"……
-
scopeStorage
@Deprecated public static void scopeStorage(Context context, String filePath, String mimeType)
已过时。此方法未完成,请不要使用- 参数:
context-ContextfilePath- 有效文件路径mimeType- Mime_Type
-
existV28
public static Uri existV28(Context context, String mimeType, String filePath)
Android Q以下版本,查询媒体库中当前路径是否存在- 参数:
context-ContextmimeType- 文件的mime,比如:audio/*、video/*、image/*filePath- 文件绝对路径- 返回:
- Uri - null 表示不存在
-
delete
public static boolean delete(@NonNull Activity context, @NonNull Uri uri)
当启用了 分区存储 ,无权限删除 给定的 RowUri时,会 启用Activity.startIntentSenderForResult(IntentSender, int, Intent, int, int, int)发起请求权限,requestCode 为REQUEST_DELETE_CODE,后面的流程需自行接管处理
-
copyFile
public static boolean copyFile(String oldPath, OutputStream out)
从指定文件path向一个 输出流OutputStream输出,实现 copy- 参数:
oldPath- 数据源文件路径out- 输出stream- 返回:
- boolean - 是否copy成功
-
-