如何檢測android上的多媒體文件屬於音頻、視頻還是圖片

如何檢測機器人上的多媒體文件屬於音頻,視頻還是圖片?要判斷擴展名?

如果原生android不支持的媒體文件或者經過修改framework,添加了支持的媒體文件,還要添加擴展名的判斷嗎?

經過查看android源碼發現,framework中有標記爲hide的註解,這說明我們的Application layer不能調用這些類以及類下的方法和屬性,那麼我們只能通過反射機制來調用。那麼看一下以下的實現方式。


公共類JudgeMultiMediaType {


<?>類mMediaFile,mMediaFileType;

方法getFileTypeMethod,isAudioFileTypeMethod,isVideoFileTypeMethod,isImageFileTypeMethod;

字符串方法名=“getBoolean”;

串getFileType =“getFileType”;

串isAudioFileType =“isAudioFileType”;

串isVideoFileType =“isVideoFileType”;

串isImageFileType =“isImageFileType”;

現場的fileType;

公共無效initReflect(){

嘗試{

mMediaFile =的Class.forName(“android.media.MediaFile”);

mMediaFileType =的Class.forName(“android.media.MediaFile $ MediaFileType”);

的fileType = mMediaFileType.getField(在“filetype”);

getFileTypeMethod = mMediaFile.getMethod(getFileType,String.class);

isAudioFileTypeMethod = mMediaFile.getMethod(isAudioFileType,int.class);

isVideoFileTypeMethod = mMediaFile.getMethod(isVideoFileType,int.class);

isImageFileTypeMethod = mMediaFile.getMethod(isImageFileType,int.class);

}趕上(NoSuchMethodException E){

e.printStackTrace();

}趕上(ClassNotFoundException異常E){

e.printStackTrace();

}趕上(NoSuchFieldException E){

e.printStackTrace();

}


}

公衆詮釋getMediaFileType(字符串路徑){


int型= 0;

嘗試{

對象obj = getFileTypeMethod.invoke(mMediaFile,路徑);

如果(OBJ == NULL){

類型= -1;

其他()

類型= fileType.getInt(OBJ);

}

}趕上(IllegalArgumentException異常E){

e.printStackTrace();

}趕上(IllegalAccessException E){

e.printStackTrace();

}趕上(InvocationTargetException E){

e.printStackTrace();

}

返回類型;

}

公共布爾isAudioFile(INT的fileType){

布爾isAudioFile = FALSE;

嘗試{

isAudioFile =(布爾)isAudioFileTypeMethod.invoke(mMediaFile,文件類型);

}趕上(IllegalArgumentException異常E){

e.printStackTrace();

}趕上(IllegalAccessException E){

e.printStackTrace();

}趕上(InvocationTargetException E){

e.printStackTrace();

}

返回isAudioFile;

}

公共布爾isVideoFile(INT的fileType){

布爾isVideoFile = FALSE;

嘗試{

isVideoFile =(布爾)isVideoFileTypeMethod.invoke(mMediaFile,文件類型);

}趕上(IllegalArgumentException異常E){

e.printStackTrace();

}趕上(IllegalAccessException E){

e.printStackTrace();

}趕上(InvocationTargetException E){

e.printStackTrace();

}

返回isVideoFile;

}

公共布爾isImageFile(INT的fileType){

布爾isImageFile = FALSE;

嘗試{

isImageFile =(布爾)isImageFileTypeMethod.invoke(mMediaFile,文件類型);

}趕上(IllegalArgumentException異常E){

e.printStackTrace();

}趕上(IllegalAccessException E){

e.printStackTrace();

}趕上(InvocationTargetException E){

e.printStackTrace();

}

返回isImageFile;

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章