MediaFile.java revision 843ef36f7b96cc19ea7d2996b7c8661b41ec3452
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package android.media; 18 19import android.content.ContentValues; 20import android.provider.MediaStore.Audio; 21import android.provider.MediaStore.Images; 22import android.provider.MediaStore.Video; 23 24import java.util.HashMap; 25import java.util.Iterator; 26 27/** 28 * MediaScanner helper class. 29 * 30 * {@hide} 31 */ 32public class MediaFile { 33 // comma separated list of all file extensions supported by the media scanner 34 public final static String sFileExtensions; 35 36 // Audio file types 37 public static final int FILE_TYPE_MP3 = 1; 38 public static final int FILE_TYPE_M4A = 2; 39 public static final int FILE_TYPE_WAV = 3; 40 public static final int FILE_TYPE_AMR = 4; 41 public static final int FILE_TYPE_AWB = 5; 42 public static final int FILE_TYPE_WMA = 6; 43 public static final int FILE_TYPE_OGG = 7; 44 private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3; 45 private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_OGG; 46 47 // MIDI file types 48 public static final int FILE_TYPE_MID = 11; 49 public static final int FILE_TYPE_SMF = 12; 50 public static final int FILE_TYPE_IMY = 13; 51 private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID; 52 private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY; 53 54 // Video file types 55 public static final int FILE_TYPE_MP4 = 21; 56 public static final int FILE_TYPE_M4V = 22; 57 public static final int FILE_TYPE_3GPP = 23; 58 public static final int FILE_TYPE_3GPP2 = 24; 59 public static final int FILE_TYPE_WMV = 25; 60 private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4; 61 private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WMV; 62 63 // Image file types 64 public static final int FILE_TYPE_JPEG = 31; 65 public static final int FILE_TYPE_GIF = 32; 66 public static final int FILE_TYPE_PNG = 33; 67 public static final int FILE_TYPE_BMP = 34; 68 public static final int FILE_TYPE_WBMP = 35; 69 private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG; 70 private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WBMP; 71 72 // Playlist file types 73 public static final int FILE_TYPE_M3U = 41; 74 public static final int FILE_TYPE_PLS = 42; 75 public static final int FILE_TYPE_WPL = 43; 76 private static final int FIRST_PLAYLIST_FILE_TYPE = FILE_TYPE_M3U; 77 private static final int LAST_PLAYLIST_FILE_TYPE = FILE_TYPE_WPL; 78 79 static class MediaFileType { 80 81 int fileType; 82 String mimeType; 83 84 MediaFileType(int fileType, String mimeType) { 85 this.fileType = fileType; 86 this.mimeType = mimeType; 87 } 88 } 89 90 private static HashMap<String, MediaFileType> sFileTypeMap 91 = new HashMap<String, MediaFileType>(); 92 private static HashMap<String, Integer> sMimeTypeMap 93 = new HashMap<String, Integer>(); 94 static void addFileType(String extension, int fileType, String mimeType) { 95 sFileTypeMap.put(extension, new MediaFileType(fileType, mimeType)); 96 sMimeTypeMap.put(mimeType, Integer.valueOf(fileType)); 97 } 98 static { 99 addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg"); 100 addFileType("M4A", FILE_TYPE_M4A, "audio/mp4"); 101 addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav"); 102 addFileType("AMR", FILE_TYPE_AMR, "audio/amr"); 103 addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb"); 104 addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma"); 105 addFileType("OGG", FILE_TYPE_OGG, "application/ogg"); 106 addFileType("OGA", FILE_TYPE_OGG, "application/ogg"); 107 108 addFileType("MID", FILE_TYPE_MID, "audio/midi"); 109 addFileType("MIDI", FILE_TYPE_MID, "audio/midi"); 110 addFileType("XMF", FILE_TYPE_MID, "audio/midi"); 111 addFileType("RTTTL", FILE_TYPE_MID, "audio/midi"); 112 addFileType("SMF", FILE_TYPE_SMF, "audio/sp-midi"); 113 addFileType("IMY", FILE_TYPE_IMY, "audio/imelody"); 114 addFileType("RTX", FILE_TYPE_MID, "audio/midi"); 115 addFileType("OTA", FILE_TYPE_MID, "audio/midi"); 116 117 addFileType("MP4", FILE_TYPE_MP4, "video/mp4"); 118 addFileType("M4V", FILE_TYPE_M4V, "video/mp4"); 119 addFileType("3GP", FILE_TYPE_3GPP, "video/3gpp"); 120 addFileType("3GPP", FILE_TYPE_3GPP, "video/3gpp"); 121 addFileType("3G2", FILE_TYPE_3GPP2, "video/3gpp2"); 122 addFileType("3GPP2", FILE_TYPE_3GPP2, "video/3gpp2"); 123 addFileType("WMV", FILE_TYPE_WMV, "video/x-ms-wmv"); 124 125 addFileType("JPG", FILE_TYPE_JPEG, "image/jpeg"); 126 addFileType("JPEG", FILE_TYPE_JPEG, "image/jpeg"); 127 addFileType("GIF", FILE_TYPE_GIF, "image/gif"); 128 addFileType("PNG", FILE_TYPE_PNG, "image/png"); 129 addFileType("BMP", FILE_TYPE_BMP, "image/x-ms-bmp"); 130 addFileType("WBMP", FILE_TYPE_WBMP, "image/vnd.wap.wbmp"); 131 132 addFileType("M3U", FILE_TYPE_M3U, "audio/x-mpegurl"); 133 addFileType("PLS", FILE_TYPE_PLS, "audio/x-scpls"); 134 addFileType("WPL", FILE_TYPE_WPL, "application/vnd.ms-wpl"); 135 136 // compute file extensions list for native Media Scanner 137 StringBuilder builder = new StringBuilder(); 138 Iterator<String> iterator = sFileTypeMap.keySet().iterator(); 139 140 while (iterator.hasNext()) { 141 if (builder.length() > 0) { 142 builder.append(','); 143 } 144 builder.append(iterator.next()); 145 } 146 sFileExtensions = builder.toString(); 147 } 148 149 public static final String UNKNOWN_STRING = "<unknown>"; 150 151 public static boolean isAudioFileType(int fileType) { 152 return ((fileType >= FIRST_AUDIO_FILE_TYPE && 153 fileType <= LAST_AUDIO_FILE_TYPE) || 154 (fileType >= FIRST_MIDI_FILE_TYPE && 155 fileType <= LAST_MIDI_FILE_TYPE)); 156 } 157 158 public static boolean isVideoFileType(int fileType) { 159 return (fileType >= FIRST_VIDEO_FILE_TYPE && 160 fileType <= LAST_VIDEO_FILE_TYPE); 161 } 162 163 public static boolean isImageFileType(int fileType) { 164 return (fileType >= FIRST_IMAGE_FILE_TYPE && 165 fileType <= LAST_IMAGE_FILE_TYPE); 166 } 167 168 public static boolean isPlayListFileType(int fileType) { 169 return (fileType >= FIRST_PLAYLIST_FILE_TYPE && 170 fileType <= LAST_PLAYLIST_FILE_TYPE); 171 } 172 173 public static MediaFileType getFileType(String path) { 174 int lastDot = path.lastIndexOf("."); 175 if (lastDot < 0) 176 return null; 177 return sFileTypeMap.get(path.substring(lastDot + 1).toUpperCase()); 178 } 179 180 public static int getFileTypeForMimeType(String mimeType) { 181 Integer value = sMimeTypeMap.get(mimeType); 182 return (value == null ? 0 : value.intValue()); 183 } 184 185} 186