Android菜鸟笔记-关联APK程序打开的文件类型:MimeType

主要内容:

①MimeType概述

②MimeType参数列表

③一段简易文件浏览器中调用第三方APK打开选中文件的代码


1.MimeType概述

先上一段代码

<intent-filter >  
    <action android:name="android.intent.action.VIEW" />  
    <category android:name="android.intent.category.DEFAULT" />  
    <data android:mimeType="text/plain" />  
</intent-filter> 

如上代码中,Intent-Filter中的<data>有一个mimeType . 它的作用是告诉Android系统本Activity可以处理的文件的类型。如上面设置为 “text/plain”,表示本Activity可以打开处理“.txt”类型的文件。


2.摘录一段网上的相关介绍和参数介绍:

多用途互联网邮件扩展MIMEMultipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。

内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现。[type]/[subtype]

type有下面的形式:

  • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
  • Application:用于传输应用程序数据或者二进制数据;
  • Message:用于包装一个E-mail消息;
  • Image:用于传输静态图片数据;
  • Audio:用于传输音频或者音声数据;
  • Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。常用的subtype值如下所示:

  • text/plain(纯文本
  • text/html(HTML文档)
  • application/xhtml+xml(XHTML文档)
  • image/gif(GIF图像)
  • image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
  • image/png(PNG图像)【PHP中为:image/x-png】
  • video/mpeg(MPEG动画)
  • application/octet-stream(任意的二进制数据)
  • application/pdf(PDF文档)
  • application/msword(Microsoft Word文件)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
  • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合)



3.一段代码:简易SD卡文件浏览器中用于实现打开选中的文件

import java.io.File;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.widget.Toast;

public class CallOtherOpenFile {

	 public void openFile(Context context,File file){   
	        try{  
	        Intent intent = new Intent();   
	        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   
	        //设置intent的Action属性    
	        intent.setAction(Intent.ACTION_VIEW);   
	        //获取文件file的MIME类型    
	        String type = getMIMEType(file);   
	        //设置intent的data和Type属性。    
	        intent.setDataAndType(Uri.fromFile(file), type);   
	        //跳转    
	        context.startActivity(intent);     
	        }catch (ActivityNotFoundException e) {  
	            // TODO: handle exception   
	            Toast.makeText(context, "sorry附件不能打开,请下载相关软件!", 500).show();  
	        }  
	    }   
	    private String getMIMEType(File file) {   
	           
	        String type="*/*";   
	        String fName = file.getName();   
	        //获取后缀名前的分隔符"."在fName中的位置。    
	        int dotIndex = fName.lastIndexOf(".");   
	        if(dotIndex < 0){   
	            return type;   
	        }   
	        /* 获取文件的后缀名*/   
	        String end=fName.substring(dotIndex,fName.length()).toLowerCase();   
	        if(end=="")
	        	return type;   
	        //在MIME和文件类型的匹配表中找到对应的MIME类型。    
	        for(int i=0;i<MIME_MapTable.length;i++){   
	 
	        if(end.equals(MIME_MapTable[i][0]))   
	            type = MIME_MapTable[i][1];   
	    }          
	    return type;   
	}   
	 
	// 可以自己随意添加 删减
	     private String [][]  MIME_MapTable={   
	            //{后缀名,MIME类型}    
	            {".3gp",    "video/3gpp"},   
	            {".apk",    "application/vnd.Android.package-archive"},   
	            {".asf",    "video/x-ms-asf"},   
	            {".avi",    "video/x-msvideo"},   
	            {".bin",    "application/octet-stream"},   
	            {".bmp",    "image/bmp"},   
	            {".c",  "text/plain"},   
	            {".class",  "application/octet-stream"},   
	            {".conf",   "text/plain"},   
	            {".cpp",    "text/plain"},   
	            {".doc",    "application/msword"},   
	            {".docx",   "application/vnd.openxmlformats-officedocument.wordprocessingml.document"},   
	            {".xls",    "application/vnd.ms-excel"},    
	            {".xlsx",   "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"},   
	            {".exe",    "application/octet-stream"},   
	            {".gif",    "image/gif"},   
	            {".gtar",   "application/x-gtar"},   
	            {".gz", "application/x-gzip"},   
	            {".h",  "text/plain"},   
	            {".htm",    "text/html"},   
	            {".html",   "text/html"},   
	            {".jar",    "application/java-archive"},   
	            {".java",   "text/plain"},   
	            {".jpeg",   "image/jpeg"},   
	            {".jpg",    "image/jpeg"},   
	            {".js", "application/x-javascript"},   
	            {".log",    "text/plain"},   
	            {".m3u",    "audio/x-mpegurl"},   
	            {".m4a",    "audio/mp4a-latm"},   
	            {".m4b",    "audio/mp4a-latm"},   
	            {".m4p",    "audio/mp4a-latm"},   
	            {".m4u",    "video/vnd.mpegurl"},   
	            {".m4v",    "video/x-m4v"},    
	            {".mov",    "video/quicktime"},   
	            {".mp2",    "audio/x-mpeg"},   
	            {".mp3",    "audio/x-mpeg"},   
	            {".mp4",    "video/mp4"},   
	            {".mpc",    "application/vnd.mpohun.certificate"},          
	            {".mpe",    "video/mpeg"},     
	            {".mpeg",   "video/mpeg"},     
	            {".mpg",    "video/mpeg"},     
	            {".mpg4",   "video/mp4"},      
	            {".mpga",   "audio/mpeg"},   
	            {".msg",    "application/vnd.ms-outlook"},   
	            {".ogg",    "audio/ogg"},   
	            {".pdf",    "application/pdf"},   
	            {".png",    "image/png"},   
	            {".pps",    "application/vnd.ms-powerpoint"},   
	            {".ppt",    "application/vnd.ms-powerpoint"},   
	            {".pptx",   "application/vnd.openxmlformats-officedocument.presentationml.presentation"},   
	            {".prop",   "text/plain"},   
	            {".rc", "text/plain"},   
	            {".rmvb",   "audio/x-pn-realaudio"},   
	            {".rtf",    "application/rtf"},   
	            {".sh", "text/plain"},   
	            {".tar",    "application/x-tar"},      
	            {".tgz",    "application/x-compressed"},    
	            {".txt",    "text/plain"},   
	            {".wav",    "audio/x-wav"},   
	            {".wma",    "audio/x-ms-wma"},   
	            {".wmv",    "audio/x-ms-wmv"},   
	            {".wps",    "application/vnd.ms-works"},   
	            {".xml",    "text/plain"},   
	            {".z",  "application/x-compress"},   
	            {".zip",    "application/x-zip-compressed"},   
	            {"",        "*/*"}     
	        };   
	  
}

调用的时候事例代码如下:

CallOtherOpenFile call= new CallOtherOpenFile();
call.openFile(context, file);

这样就可以调用系统里相关程序打开file这个文件了(主要就是识别文件的后缀名)



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页