前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Code Snippet for Media on Android

Code Snippet for Media on Android

作者头像
技术小黑屋
发布2018-09-04 16:38:01
7410
发布2018-09-04 16:38:01
举报
文章被收录于专栏:技术小黑屋

A few days ago,I have wrote down this post http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android/. Now I will paste my code snippet.

MediaUtils.java

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138

package com.mx.browser.utils; import java.io.File; import java.util.Locale; import com.mx.utils.FileUtils; import com.mx.utils.Log; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.OnScanCompletedListener; import android.net.Uri; import android.provider.MediaStore.Audio; import android.provider.MediaStore.Images; import android.provider.MediaStore.Video; import android.text.TextUtils; /** * Utility Methods for Media Library Operations * @author androidyue * Referrer http://androidyue.github.io/blog/2014/01/19/scan-media-files-in-android/ */ public class MediaUtils { private static final String LOGTAG = "MediaUtils"; /** * Scan a media file by sending a broadcast.This is the easiest way. * 对方成功接收广播并处理条件 文件必须存在,文件路径必须以Environment.getExternalStorageDirectory().getPath() 的返回值开头 */ public static void sendScanFileBroadcast(Context context, String filePath) { File file = new File(filePath); Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)); context.sendBroadcast(intent); } /** * * @param context * @param paths File paths to scan * @param mimeTypes mimeTypes in array;it could be null;then * @param callback */ public static void scanFiles(Context context, String[] paths, String[] mimeTypes, OnScanCompletedListener callback) { if (null != paths && paths.length != 0) { MediaScannerConnection.scanFile(context, paths, mimeTypes, callback); } else { Log.i(LOGTAG, "scanFiles paths = null or paths.length=0 paths=" + paths); } } public static void scanFiles(Context context, String[] paths, String[] mimeTypes) { scanFiles(context, paths, mimeTypes, null); } public static void scanFiles(Context context, String[] paths) { scanFiles(context, paths, null); } public static int removeImageFromLib(Context context, String filePath) { ContentResolver resolver = context.getContentResolver(); return resolver.delete(Images.Media.EXTERNAL_CONTENT_URI, Images.Media.DATA + "=?", new String[]{filePath}); } public static int removeAudioFromLib(Context context, String filePath) { return context.getContentResolver().delete(Audio.Media.EXTERNAL_CONTENT_URI, Audio.Media.DATA + "=?", new String[] {filePath}); } public static int removeVideoFromLib(Context context, String filePath) { return context.getContentResolver().delete(Video.Media.EXTERNAL_CONTENT_URI, Video.Media.DATA + "=?", new String[] {filePath}); } public static int removeMediaFromLib(Context context, String filePath) { String mimeType = FileUtils.getFileMimeType(filePath); int affectedRows = 0; if (null != mimeType) { mimeType = mimeType.toLowerCase(Locale.US); if (isImage(mimeType)) { affectedRows = removeImageFromLib(context, filePath); } else if (isAudio(mimeType)) { affectedRows = removeAudioFromLib(context ,filePath); } else if (isVideo(mimeType)) { affectedRows = removeVideoFromLib(context, filePath); } } return affectedRows; } public static boolean isAudio(String mimeType) { return mimeType.startsWith("audio"); } public static boolean isImage(String mimeType) { return mimeType.startsWith("image"); } public static boolean isVideo(String mimeType) { return mimeType.startsWith("video"); } public static boolean isMediaFile(String filePath) { String mimeType = FileUtils.getFileMimeType(filePath); return isMediaType(mimeType); } public static boolean isMediaType(String mimeType) { boolean isMedia = false; if (!TextUtils.isEmpty(mimeType)) { mimeType = mimeType.toLowerCase(Locale.US); isMedia = isImage(mimeType) || isAudio(mimeType) || isVideo(mimeType); } return isMedia; } /** * Before using it,please do have a media type check. * @param context * @param srcPath * @param destPath * @return */ public static int renameMediaFile(Context context, String srcPath, String destPath) { removeMediaFromLib(context, srcPath); sendScanFileBroadcast(context, destPath); return 0; } }

FileUtils.java

1 2 3 4 5 6 7 8 9 10

public static String getFileMimeType(String filename) { if (TextUtils.isEmpty(filename)) { return null; } int lastDotIndex = filename.lastIndexOf('.'); String mimetype = MimeTypeMap.getSingleton().getMimeTypeFromExtension( filename.substring(lastDotIndex + 1).toLowerCase()); Log.i(LOGTAG, "getFileMimeType mimeType = " + mimetype); return mimetype; }

Others

  • Pro Android Media: Developing Graphics, Music, Video, and Rich Media Apps for Smartphones and Tablets
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MediaUtils.java
  • FileUtils.java
  • Others
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档