[DESCRIPTION]
在文件管理器中播放录音文件(.3gp 或者 .ogg)时,默认是用 video player 播放,如何修改使其可以选择音乐播放器播放?
[SOLUTION]
涉及文件:1、FileManager/src/com/mediatek/filemanager/service/FileManagerService.java2、FileManager/src/com/mediatek/filemanager/FileInfo.java3、Music/AndroidManifest.xml
1. 恢复 FileManagerService.java 中被注释掉的函数:
public String update3gppMimetype(FileInfo fileInfo) 及其函数体
public String update3gppMimetype(FileInfo fileInfo) {LogUtils.d(TAG, "update3gppMimetype...");String mimeType = FileInfo.MIMETYPE_3GPP_VIDEO;ContentResolver resolver = getContentResolver();if (resolver != null && fileInfo != null) {// fileInfo.setFileMimeType(FileInfo.MIMETYPE_3GPP_VIDEO);final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;final String[] projection = new String[] { MediaStore.MediaColumns.MIME_TYPE };final String selection = MediaStore.MediaColumns.DATA + "=?";final String[] selectionArgs = new String[] { fileInfo.getFileAbsolutePath() };Cursor cursor = null;try {cursor = resolver.query(uri, projection, selection,selectionArgs, null);LogUtils.d(TAG, "update3gppMimetype,file:" + fileInfo.getFileAbsolutePath());if (cursor != null && cursor.moveToFirst()) {mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE));LogUtils.d(TAG, "update3gppMimetype mimeType: " + mimeType);} else {mimeType = fileInfo.getFileOriginMimeType();LogUtils.d(TAG, "update3gppMimetype, not find from media,origin mimeType: " + mimeType);if (mimeType == null) {mimeType = FileInfo.MIMETYPE_3GPP_VIDEO;}}} finally {if (cursor != null) {cursor.close();}}}return mimeType;}
添加导包:
import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.provider.MediaStore;
2. 恢复 FileInfo.java 中的部分代码;
private static HashMap<String, String> sMimeType3GPPMap = new HashMap<String, String>();
public String getFileMimeType(FileManagerService service) 中被注释的代码:///M:@#3gp#@{the follow code is to handle the 3gp file.not do special handle now 这个注释以下的所有内容
///M:@#3gp#@{the follow code is to handle the 3gp file.not do special handle nowif (mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP_UNKONW)) {mimeType = service.update3gppMimetype(this);}if (mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP_AUDIO)|| mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP_VIDEO)|| mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP2_VIDEO)) {String name = null;int sepIndex = mName.lastIndexOf("(");if (sepIndex > 0) {name = mName.substring(0, sepIndex);} else {name = mName.substring(0, mName.indexOf("."));}LogUtils.d(TAG, "getFileMimeType ,record the mimetype: " + mimeType + ",name = "+ name + ",mName = " + mName);sMimeType3GPPMap.put(name, mimeType);}///@the top code is to handle the 3gp file.not do special handle now}
private String getMimeType(File file)中被注释掉的代码:///M:#3gp#@{the follow code is to handle the 3gp file.not do special handle now这个注释以下的所有内容///M:#3gp#@{the follow code is to handle the 3gp file.not do special handle now// sp ecial solution for checking 3gpp original mimetype// 3gpp extension could be video/3gpp or audio/3gppif (mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP_VIDEO)|| mimeType.equalsIgnoreCase(FileInfo.MIMETYPE_3GPP2_VIDEO)) {LogUtils.d(TAG, "getMimeType, a 3gpp or 3g2 file,mimeType=" + mimeType);return FileInfo.MIMETYPE_3GPP_UNKONW;}///M:@{the top code is to handle the 3gp file.not do special handle now
被注释掉的函数
public String getFileOriginMimeType()全部恢复 ```java ///M:@#3gp#{the follow code is to handle the 3gp file.not do special handle now public String getFileOriginMimeType() { String key = null; LogUtils.d(TAG, “getFileOriginMimeType, mName =” + mName); int sepIndex = mName.lastIndexOf(“(“); if (sepIndex > 0) {key = mName.substring(0, sepIndex);
} else {
key = mName.substring(0, mName.indexOf("."));
} LogUtils.d(TAG, “getFileOriginMimeType,key is:” + key); String orginalMimeType = sMimeType3GPPMap.get(key); LogUtils.d(TAG, “getFileOriginMimeType, OrginalMimeType=” + orginalMimeType); if (orginalMimeType != null) {
sMimeType3GPPMap.remove(key);
} return orginalMimeType;
} ///M:@{the top code is to handle the 3gp file.not do special handle now
- 添加导包```javaimport java.util.HashMap;
3. 在 music 的 androidManifest.xml 中,在
<activity android:name="com.android.music.MediaPlaybackActivity"
下添加如下intent filter:
<intent-filter android:priority="1"><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><data android:scheme="file"/><data android:mimeType="audio/*"/><data android:mimeType="application/ogg"/><data android:mimeType="application/x-ogg"/><data android:mimeType="application/itunes"/><data android:mimeType="application/aac"/><data android:mimeType="application/imy"/><data android:mimeType="application/3gpp"/></intent-filter>
