文章目錄
-
- 一、AndroidManifest.xml檔案配置
- 二、編寫paths
- 三、intent具體實作
- 四、總結
- 參考資料
最近在做一個安卓app,需要實作對ListView所列的特定字尾的檔案進行分享,或者使用其他app打開,通過了解主要方法是使用intent啟動其他程式,但是由于android為了提高私有檔案的安全性,面向 Android 7.0 或更高版本的應用私有目錄被限制通路,是以單純打開檔案或者分享檔案将報錯,需要配置android提供的FileProvider,在配置過程中,參照一些部落格,發現都會報各種錯誤,遇到很多問題,他們寫的要麼零零散散,要不就是早期版本,現在已經不适用,最後在參照官方文檔情況下終于解決,現在記錄下載下傳分享給大家,希望對你有所幫助。
效果如下:
一、AndroidManifest.xml檔案配置
首先,我們需要定義一個FileProvider,打開AndroidManifest.xml檔案,将如下代碼添加進去:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>
注意: 這個所放的位置千萬别放錯了,有很多文章都沒有講所放具體位置,我自己就放錯過,這個provider配置檔案放在你“application”子目錄裡面,與“activity”同級,如下所示,具體manifest檔案結構配置可參考這篇部落格。
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths"/>
</provider>
name: 這個有很多部落格寫的是
android.support.v4.content.FileProvider
,注意,現在會報錯,官方文檔現在就是用我上面提供的類。
authorities: 這裡隻是讓你提供一個此provider目前授權名,後續使用此fileprovider就需要提供這個名字,這裡你可以随便取什麼名字都可以,不像其他很多文章中起的各種各樣,還以為必須要按什麼格式起,也不說明為什麼,是以這裡建議大家可以起自己app名字,或者幹脆直接寫一個“fileprovider”,隻需要後面用到時候跟這裡一樣就行。
exported: 這裡直接寫“false”,表示此FileProvider不需要公開;
grantUriPermissions: 這裡寫“true”,表示允許您授予對檔案的臨時通路權限,是以就可以通過其他app打開你所指定檔案;
meta-data: FileProvider 隻能為您預先指定的目錄中的檔案生成content URI,是以後續還需要定義一個xml檔案用來指定目錄,而為了将那個xml檔案跟這個FileProvider連結起來,我們就需要定義“meta-data”這個元素,其中“name”指明是用來提供檔案路徑,而“resource”用來指明這個xml檔案,這裡可以建立一個名為“xml”檔案夾,在檔案夾内建立一個名為“filepaths”的xml檔案,當然這個檔案夾及檔案名可以自己順便取,隻要将上面的“resource”命為自己建立的檔案名即可。
二、編寫paths
上面我們說到,FileProvider 隻能為您預先指定的目錄中的檔案生成content URI,是以我們需要指定目錄用于授權給FileProvider,上面我們已經建立了一個filepaths.xml檔案,将其打開,将以下内容複制到裡面:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<!--
1、name對應的屬性值,開發者可以自由定義;
2、path對應的屬性值,目前external-path标簽下的相對路徑
比如:/storage/emulated/0/92Recycle-release.apk
sdcard路徑:/storage/emulated/0(WriteToReadActivity.java:176)
at cn.teachcourse.nougat.WriteToReadActivity.onClick(WriteToReadActivity.java:97)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
相對路徑:/
-->
<!--1、對應内部記憶體卡根目錄:Context.getFileDir()-->
<files-path
name="int_root"
path="/" />
<!--2、對應應用預設緩存根目錄:Context.getCacheDir()-->
<cache-path
name="app_cache"
path="/" />
<!--3、對應外部記憶體卡根目錄:Environment.getExternalStorageDirectory()-->
<external-path
name="ext_root"
path="Documents/" />
<!--4、對應外部記憶體卡根目錄下的APP公共目錄:Context.getExternalFileDir(String)-->
<external-files-path
name="ext_pub"
path="/" />
<!--5、對應外部記憶體卡根目錄下的APP緩存目錄:Context.getExternalCacheDir()-->
<external-cache-path
name="ext_cache"
path="/" />
</paths>
這裡有多種路徑,這就需要看你所需要打開的檔案在哪個目錄下,這裡我們把所有的可能用到的路徑都寫上去,對于我這個項目,我的檔案放在external-path路徑下,也就是
Environment.getExternalStorageDirectory()
擷取的路徑下的檔案,并且我放在此路徑下的Documents檔案夾下,是以我在external-path元素下更加針對性的對Documents檔案夾路徑授權,而如果直接寫一個“/”就表示對所有該目錄下檔案授權。當然,對于其他元素,比如files-path,cache-path,external-files-path,external-cache-path我這裡其實可以不用寫,因為沒用到,不需要對這些目錄授權,但是如果你需要對這些目錄裡的檔案進行分享授權,就需要定義這些元素。
然後是這個name,這個name名字你可以随便命名,這裡隻是用來作為你的content uri其中的前面路徑縮寫名字,後面我會示範。
三、intent具體實作
終于把前面的準備工作做完了,現在可以在我們實際活動代碼中啟動設定intent來啟動檔案了,
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setAction(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(context,"fileprovider",new File(file_path));
intent.setDataAndType(uri, MapTable.getMIMEType(file));
startActivity(intent);
首先初始化一個intent,然後添加Flags,特别注意,需要有
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
一行授予uri檔案讀寫權限,很多文章沒寫這一行,導緻出現檔案無法打開或者不存在這個報錯,然後使用
FileProvider.getUriForFile
擷取uri,而不是一些文章寫的使用
Uri.fromFile(new File(file))
,這裡第一個參數是你目前context,第二個參數就是最開始在AndroidManifest.xml中provider的“authorities”元素的名字,需要與之相同,最後面是你的檔案。
然後,就是将這個檔案uri提供給intent,這裡使用
intent.setDataAndType
,可以指定某種類型檔案打開,比如.mp3,.wav,.pdf等等,首先第一個參數是上面擷取的uri,第二個參數是我們檔案的MIMEtype,這個有兩種擷取方式:
1、你知道你的檔案類型,可以直接通過查詢,填入該檔案MIMEtype即可,比如“.wav”檔案的MIMEType是"audio/x-wav",是以我直接填入這個即可;
2、我通過程式自動識别檔案字尾,指定其MIMEType,比如這裡我定義了一個Maptable類,其中設定了擷取MIMEType的方法,使用這個方法就可以擷取。以下是該Maptable類定義代碼:
public class MapTable {
/**
* -- MIME 清單 --
*/
public static final String[][] MIME_MapTable = {
// --{字尾名, MIME類型} --
{".3gp", "video/3gpp"},
{".3gpp", "video/3gpp"},
{".aac", "audio/x-mpeg"},
{".amr", "audio/x-mpeg"},
{".apk", "application/vnd.android.package-archive"},
{".avi", "video/x-msvideo"},
{".aab", "application/x-authoware-bin"},
{".aam", "application/x-authoware-map"},
{".aas", "application/x-authoware-seg"},
{".ai", "application/postscript"},
{".aif", "audio/x-aiff"},
{".aifc", "audio/x-aiff"},
{".aiff", "audio/x-aiff"},
{".als", "audio/x-alpha5"},
{".amc", "application/x-mpeg"},
{".ani", "application/octet-stream"},
{".asc", "text/plain"},
{".asd", "application/astound"},
{".asf", "video/x-ms-asf"},
{".asn", "application/astound"},
{".asp", "application/x-asap"},
{".asx", " video/x-ms-asf"},
{".au", "audio/basic"},
{".avb", "application/octet-stream"},
{".awb", "audio/amr-wb"},
{".bcpio", "application/x-bcpio"},
{".bld", "application/bld"},
{".bld2", "application/bld2"},
{".bpk", "application/octet-stream"},
{".bz2", "application/x-bzip2"},
{".bin", "application/octet-stream"},
{".bmp", "image/bmp"},
{".c", "text/plain"},
{".class", "application/octet-stream"},
{".conf", "text/plain"},
{".cpp", "text/plain"},
{".cal", "image/x-cals"},
{".ccn", "application/x-cnc"},
{".cco", "application/x-cocoa"},
{".cdf", "application/x-netcdf"},
{".cgi", "magnus-internal/cgi"},
{".chat", "application/x-chat"},
{".clp", "application/x-msclip"},
{".cmx", "application/x-cmx"},
{".co", "application/x-cult3d-object"},
{".cod", "image/cis-cod"},
{".cpio", "application/x-cpio"},
{".cpt", "application/mac-compactpro"},
{".crd", "application/x-mscardfile"},
{".csh", "application/x-csh"},
{".csm", "chemical/x-csml"},
{".csml", "chemical/x-csml"},
{".css", "text/css"},
{".cur", "application/octet-stream"},
{".doc", "application/msword"},
{".dcm", "x-lml/x-evm"},
{".dcr", "application/x-director"},
{".dcx", "image/x-dcx"},
{".dhtml", "text/html"},
{".dir", "application/x-director"},
{".dll", "application/octet-stream"},
{".dmg", "application/octet-stream"},
{".dms", "application/octet-stream"},
{".dot", "application/x-dot"},
{".dvi", "application/x-dvi"},
{".dwf", "drawing/x-dwf"},
{".dwg", "application/x-autocad"},
{".dxf", "application/x-autocad"},
{".dxr", "application/x-director"},
{".ebk", "application/x-expandedbook"},
{".emb", "chemical/x-embl-dl-nucleotide"},
{".embl", "chemical/x-embl-dl-nucleotide"},
{".eps", "application/postscript"},
{".epub", "application/epub+zip"},
{".eri", "image/x-eri"},
{".es", "audio/echospeech"},
{".esl", "audio/echospeech"},
{".etc", "application/x-earthtime"},
{".etx", "text/x-setext"},
{".evm", "x-lml/x-evm"},
{".evy", "application/x-envoy"},
{".exe", "application/octet-stream"},
{".fh4", "image/x-freehand"},
{".fh5", "image/x-freehand"},
{".fhc", "image/x-freehand"},
{".fif", "image/fif"},
{".fm", "application/x-maker"},
{".fpx", "image/x-fpx"},
{".fvi", "video/isivideo"},
{".flv", "video/x-msvideo"},
{".gau", "chemical/x-gaussian-input"},
{".gca", "application/x-gca-compressed"},
{".gdb", "x-lml/x-gdb"},
{".gif", "image/gif"},
{".gps", "application/x-gps"},
{".gtar", "application/x-gtar"},
{".gz", "application/x-gzip"},
{".gif", "image/gif"},
{".gtar", "application/x-gtar"},
{".gz", "application/x-gzip"},
{".h", "text/plain"},
{".hdf", "application/x-hdf"},
{".hdm", "text/x-hdml"},
{".hdml", "text/x-hdml"},
{".htm", "text/html"},
{".html", "text/html"},
{".hlp", "application/winhlp"},
{".hqx", "application/mac-binhex40"},
{".hts", "text/html"},
{".ice", "x-conference/x-cooltalk"},
{".ico", "application/octet-stream"},
{".ief", "image/ief"},
{".ifm", "image/gif"},
{".ifs", "image/ifs"},
{".imy", "audio/melody"},
{".ins", "application/x-net-install"},
{".ips", "application/x-ipscript"},
{".ipx", "application/x-ipix"},
{".it", "audio/x-mod"},
{".itz", "audio/x-mod"},
{".ivr", "i-world/i-vrml"},
{".j2k", "image/j2k"},
{".jad", "text/vnd.sun.j2me.app-descriptor"},
{".jam", "application/x-jam"},
{".jnlp", "application/x-java-jnlp-file"},
{".jpe", "image/jpeg"},
{".jpz", "image/jpeg"},
{".jwc", "application/jwc"},
{".jar", "application/java-archive"},
{".java", "text/plain"},
{".jpeg", "image/jpeg"},
{".jpg", "image/jpeg"},
{".js", "application/x-javascript"},
{".kjx", "application/x-kjx"},
{".lak", "x-lml/x-lak"},
{".latex", "application/x-latex"},
{".lcc", "application/fastman"},
{".lcl", "application/x-digitalloca"},
{".lcr", "application/x-digitalloca"},
{".lgh", "application/lgh"},
{".lha", "application/octet-stream"},
{".lml", "x-lml/x-lml"},
{".lmlpack", "x-lml/x-lmlpack"},
{".log", "text/plain"},
{".lsf", "video/x-ms-asf"},
{".lsx", "video/x-ms-asf"},
{".lzh", "application/x-lzh "},
{".m13", "application/x-msmediaview"},
{".m14", "application/x-msmediaview"},
{".m15", "audio/x-mod"},
{".m3u", "audio/x-mpegurl"},
{".m3url", "audio/x-mpegurl"},
{".ma1", "audio/ma1"},
{".ma2", "audio/ma2"},
{".ma3", "audio/ma3"},
{".ma5", "audio/ma5"},
{".man", "application/x-troff-man"},
{".map", "magnus-internal/imagemap"},
{".mbd", "application/mbedlet"},
{".mct", "application/x-mascot"},
{".mdb", "application/x-msaccess"},
{".mdz", "audio/x-mod"},
{".me", "application/x-troff-me"},
{".mel", "text/x-vmel"},
{".mi", "application/x-mif"},
{".mid", "audio/midi"},
{".midi", "audio/midi"},
{".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"},
{".mif", "application/x-mif"},
{".mil", "image/x-cals"},
{".mio", "audio/x-mio"},
{".mmf", "application/x-skt-lbs"},
{".mng", "video/x-mng"},
{".mny", "application/x-msmoney"},
{".moc", "application/x-mocha"},
{".mocha", "application/x-mocha"},
{".mod", "audio/x-mod"},
{".mof", "application/x-yumekara"},
{".mol", "chemical/x-mdl-molfile"},
{".mop", "chemical/x-mopac-input"},
{".movie", "video/x-sgi-movie"},
{".mpn", "application/vnd.mophun.application"},
{".mpp", "application/vnd.ms-project"},
{".mps", "application/x-mapserver"},
{".mrl", "text/x-mrml"},
{".mrm", "application/x-mrm"},
{".ms", "application/x-troff-ms"},
{".mts", "application/metastream"},
{".mtx", "application/metastream"},
{".mtz", "application/metastream"},
{".mzv", "application/metastream"},
{".nar", "application/zip"},
{".nbmp", "image/nbmp"},
{".nc", "application/x-netcdf"},
{".ndb", "x-lml/x-ndb"},
{".ndwn", "application/ndwn"},
{".nif", "application/x-nif"},
{".nmz", "application/x-scream"},
{".nokia-op-logo", "image/vnd.nok-oplogo-color"},
{".npx", "application/x-netfpx"},
{".nsnd", "audio/nsnd"},
{".nva", "application/x-neva1"},
{".oda", "application/oda"},
{".oom", "application/x-atlasMate-plugin"},
{".ogg", "audio/ogg"},
{".pac", "audio/x-pac"},
{".pae", "audio/x-epac"},
{".pan", "application/x-pan"},
{".pbm", "image/x-portable-bitmap"},
{".pcx", "image/x-pcx"},
{".pda", "image/x-pda"},
{".pdb", "chemical/x-pdb"},
{".pdf", "application/pdf"},
{".pfr", "application/font-tdpfr"},
{".pgm", "image/x-portable-graymap"},
{".pict", "image/x-pict"},
{".pm", "application/x-perl"},
{".pmd", "application/x-pmd"},
{".png", "image/png"},
{".pnm", "image/x-portable-anymap"},
{".pnz", "image/png"},
{".pot", "application/vnd.ms-powerpoint"},
{".ppm", "image/x-portable-pixmap"},
{".pps", "application/vnd.ms-powerpoint"},
{".ppt", "application/vnd.ms-powerpoint"},
{".pqf", "application/x-cprplayer"},
{".pqi", "application/cprplayer"},
{".prc", "application/x-prc"},
{".proxy", "application/x-ns-proxy-autoconfig"},
{".prop", "text/plain"},
{".ps", "application/postscript"},
{".ptlk", "application/listenup"},
{".pub", "application/x-mspublisher"},
{".pvx", "video/x-pv-pvx"},
{".qcp", "audio/vnd.qcelp"},
{".qt", "video/quicktime"},
{".qti", "image/x-quicktime"},
{".qtif", "image/x-quicktime"},
{".r3t", "text/vnd.rn-realtext3d"},
{".ra", "audio/x-pn-realaudio"},
{".ram", "audio/x-pn-realaudio"},
{".ras", "image/x-cmu-raster"},
{".rdf", "application/rdf+xml"},
{".rf", "image/vnd.rn-realflash"},
{".rgb", "image/x-rgb"},
{".rlf", "application/x-richlink"},
{".rm", "audio/x-pn-realaudio"},
{".rmf", "audio/x-rmf"},
{".rmm", "audio/x-pn-realaudio"},
{".rnx", "application/vnd.rn-realplayer"},
{".roff", "application/x-troff"},
{".rp", "image/vnd.rn-realpix"},
{".rpm", "audio/x-pn-realaudio-plugin"},
{".rt", "text/vnd.rn-realtext"},
{".rte", "x-lml/x-gps"},
{".rtf", "application/rtf"},
{".rtg", "application/metastream"},
{".rtx", "text/richtext"},
{".rv", "video/vnd.rn-realvideo"},
{".rwc", "application/x-rogerwilco"},
{".rar", "application/x-rar-compressed"},
{".rc", "text/plain"},
{".rmvb", "audio/x-pn-realaudio"},
{".s3m", "audio/x-mod"},
{".s3z", "audio/x-mod"},
{".sca", "application/x-supercard"},
{".scd", "application/x-msschedule"},
{".sdf", "application/e-score"},
{".sea", "application/x-stuffit"},
{".sgm", "text/x-sgml"},
{".sgml", "text/x-sgml"},
{".shar", "application/x-shar"},
{".shtml", "magnus-internal/parsed-html"},
{".shw", "application/presentations"},
{".si6", "image/si6"},
{".si7", "image/vnd.stiwap.sis"},
{".si9", "image/vnd.lgtwap.sis"},
{".sis", "application/vnd.symbian.install"},
{".sit", "application/x-stuffit"},
{".skd", "application/x-koan"},
{".skm", "application/x-koan"},
{".skp", "application/x-koan"},
{".skt", "application/x-koan"},
{".slc", "application/x-salsa"},
{".smd", "audio/x-smd"},
{".smi", "application/smil"},
{".smil", "application/smil"},
{".smp", "application/studiom"},
{".smz", "audio/x-smd"},
{".sh", "application/x-sh"},
{".snd", "audio/basic"},
{".spc", "text/x-speech"},
{".spl", "application/futuresplash"},
{".spr", "application/x-sprite"},
{".sprite", "application/x-sprite"},
{".sdp", "application/sdp"},
{".spt", "application/x-spt"},
{".src", "application/x-wais-source"},
{".stk", "application/hyperstudio"},
{".stm", "audio/x-mod"},
{".sv4cpio", "application/x-sv4cpio"},
{".sv4crc", "application/x-sv4crc"},
{".svf", "image/vnd"},
{".svg", "image/svg-xml"},
{".svh", "image/svh"},
{".svr", "x-world/x-svr"},
{".swf", "application/x-shockwave-flash"},
{".swfl", "application/x-shockwave-flash"},
{".t", "application/x-troff"},
{".tad", "application/octet-stream"},
{".talk", "text/x-speech"},
{".tar", "application/x-tar"},
{".taz", "application/x-tar"},
{".tbp", "application/x-timbuktu"},
{".tbt", "application/x-timbuktu"},
{".tcl", "application/x-tcl"},
{".tex", "application/x-tex"},
{".texi", "application/x-texinfo"},
{".texinfo", "application/x-texinfo"},
{".tgz", "application/x-tar"},
{".thm", "application/vnd.eri.thm"},
{".tif", "image/tiff"},
{".tiff", "image/tiff"},
{".tki", "application/x-tkined"},
{".tkined", "application/x-tkined"},
{".toc", "application/toc"},
{".toy", "image/toy"},
{".tr", "application/x-troff"},
{".trk", "x-lml/x-gps"},
{".trm", "application/x-msterminal"},
{".tsi", "audio/tsplayer"},
{".tsp", "application/dsptype"},
{".tsv", "text/tab-separated-values"},
{".ttf", "application/octet-stream"},
{".ttz", "application/t-time"},
{".txt", "text/plain"},
{".ult", "audio/x-mod"},
{".ustar", "application/x-ustar"},
{".uu", "application/x-uuencode"},
{".uue", "application/x-uuencode"},
{".vcd", "application/x-cdlink"},
{".vcf", "text/x-vcard"},
{".vdo", "video/vdo"},
{".vib", "audio/vib"},
{".viv", "video/vivo"},
{".vivo", "video/vivo"},
{".vmd", "application/vocaltec-media-desc"},
{".vmf", "application/vocaltec-media-file"},
{".vmi", "application/x-dreamcast-vms-info"},
{".vms", "application/x-dreamcast-vms"},
{".vox", "audio/voxware"},
{".vqe", "audio/x-twinvq-plugin"},
{".vqf", "audio/x-twinvq"},
{".vql", "audio/x-twinvq"},
{".vre", "x-world/x-vream"},
{".vrml", "x-world/x-vrml"},
{".vrt", "x-world/x-vrt"},
{".vrw", "x-world/x-vream"},
{".vts", "workbook/formulaone"},
{".wax", "audio/x-ms-wax"},
{".wbmp", "image/vnd.wap.wbmp"},
{".web", "application/vnd.xara"},
{".wav", "audio/x-wav"},
{".wma", "audio/x-ms-wma"},
{".wmv", "audio/x-ms-wmv"},
{".wi", "image/wavelet"},
{".wis", "application/x-InstallShield"},
{".wm", "video/x-ms-wm"},
{".wmd", "application/x-ms-wmd"},
{".wmf", "application/x-msmetafile"},
{".wml", "text/vnd.wap.wml"},
{".wmlc", "application/vnd.wap.wmlc"},
{".wmls", "text/vnd.wap.wmlscript"},
{".wmlsc", "application/vnd.wap.wmlscriptc"},
{".wmlscript", "text/vnd.wap.wmlscript"},
{".wmv", "video/x-ms-wmv"},
{".wmx", "video/x-ms-wmx"},
{".wmz", "application/x-ms-wmz"},
{".wpng", "image/x-up-wpng"},
{".wps", "application/vnd.ms-works"},
{".wpt", "x-lml/x-gps"},
{".wri", "application/x-mswrite"},
{".wrl", "x-world/x-vrml"},
{".wrz", "x-world/x-vrml"},
{".ws", "text/vnd.wap.wmlscript"},
{".wsc", "application/vnd.wap.wmlscriptc"},
{".wv", "video/wavelet"},
{".wvx", "video/x-ms-wvx"},
{".wxl", "application/x-wxl"},
{".x-gzip", "application/x-gzip"},
{".xar", "application/vnd.xara"},
{".xbm", "image/x-xbitmap"},
{".xdm", "application/x-xdma"},
{".xdma", "application/x-xdma"},
{".xdw", "application/vnd.fujixerox.docuworks"},
{".xht", "application/xhtml+xml"},
{".xhtm", "application/xhtml+xml"},
{".xhtml", "application/xhtml+xml"},
{".xla", "application/vnd.ms-excel"},
{".xlc", "application/vnd.ms-excel"},
{".xll", "application/x-excel"},
{".xlm", "application/vnd.ms-excel"},
{".xls", "application/vnd.ms-excel"},
{".xlt", "application/vnd.ms-excel"},
{".xlw", "application/vnd.ms-excel"},
{".xm", "audio/x-mod"},
{".xml", "text/xml"},
{".xmz", "audio/x-mod"},
{".xpi", "application/x-xpinstall"},
{".xpm", "image/x-xpixmap"},
{".xsit", "text/xml"},
{".xsl", "text/xml"},
{".xul", "text/xul"},
{".xwd", "image/x-xwindowdump"},
{".xyz", "chemical/x-pdb"},
{".yz1", "application/x-yz1"},
{".z", "application/x-compress"},
{".zac", "application/x-zaurus-zac"},
{".zip", "application/zip"},
{"", "*/*"}
};
/**
* --擷取檔案類型 --
*/
public static String getMIMEType(String filePath) {
String type = "*/*";
String fName = filePath;
int dotIndex = fName.lastIndexOf(".");
if (dotIndex < 0) {
return type;
}
String end = fName.substring(dotIndex, fName.length()).toLowerCase();
if (end == "") {
return type;
}
for (int i = 0; i < MIME_MapTable.length; i++) {
if (end.equals(MIME_MapTable[i][0])) {
type = MIME_MapTable[i][1];
}
}
return type;
}
}
四、總結
以上就是android将指定字尾(類型)檔案通過其他檔案打開或者分享整個過程,希望對大家有用,如果幫助到你,謝謝一鍵三連。(參考資料都有不同程度問題,如果想順利運作還請仔細參考本文章,轉載務必清晰注明出處!!!)
參考資料
【1】官方文檔
【2】Android 7.0之通路檔案的權限和FileProvider類
【3】unexpected element found in < manifest >< application >.
【4】Android exposed beyond app through Intent.getData()
【5】xx.apk exposed beyond app through Intent.getData()