如何检测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;

}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值