(最新)Android(安卓)FileProvider配置实现文件由其他app(应用)打开或者分享

2 篇文章 0 订阅
订阅专栏

最近在做一个安卓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()

Android多媒体功能开发(2)——FileProvider
nanoage的博客
10-09 3万+
使用系统多媒体界面需要在我们的应用和其他应用之间通过Intent传递音频、图片、视频文件的信息。Android 7及更高版本使用了更严格的文件分享模式,禁止开发人员在应用外部以 “file://”格式的uri分享应用自己目录下的文件,否则会出现 FileUriExposedException 异常。如果需要向其他应用公开应用自己目录下的文件,需要使用FileProvider
AndroidFileProvider的各种应用场景_安卓fileprovider
2401_84545468的博客
04-29 1077
包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。只要是程序员,不管是Java还是Android,如果不去阅读源码,只看API文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图。资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图。,这里放上我搜集整理的。
android怎么知道FileProvider应该导入的包名是什么?androidx.core.content.FileProvider
06-19 427
一旦你添加了这个依赖,Android Studio通常会自动为你导入正确的包名。如果你需要手动导入,你可以使用。是一个Gradle变量,它通常会被替换为你的应用的包名。(Module: app文件中添加相应的依赖来实现的。的文件(或者你可以选择一个不同的文件名,但需要在。获取一个文件的URI时,你可以使用。,你应该确保你的项目中已经包含了。值以及你想要获取URI的文件。这个方法需要你的应用的。在这个声明中,你需要指定。(或其他你选择的字符串)。当你想要在你的应用中使用。的值就是你的包名加上。
Android FileProvider的一些事
star_nwe的博客
11-15 239
高版本的android文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider实现,这篇博客来一起了解下它的实现原理。首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: 和普通的ContentProvider不一样的是他多了一个android.support.FILE_PROVIDER_PATHS的meta-data指定了一个xml资源: 文件URI 这个xml的作用在
别滥用FileProvider了,AndroidFileProvider的各种场景应用
最新发布
chuyouyinghe的专栏
08-08 535
有部分同学只要是上传或者下载,只要用到了文件,不管三七二十一写个 FileProvider 再说。不是每一种情况都需要使用 FileProvider 的,啥?你问行不行?有没有毛病?这... 写了确实可以,没毛病!但是这没有必要啊。如果不需要FileProvider就不需要定义啊,如果定义了重复的 FileProvider,还会导致清单文件合并失败,需要处理冲突,从而引出又一个问题,解决 FileProvider 的冲突问题,当然这不是本文的重点,网上也有解决方案。
Android N : FileProvider
乔培宸的博客
05-02 730
作者:梁飞 链接:https://zhuanlan.zhihu.com/p/26139355 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 一、背景 Android 从 N 开始不允许以 file:// 的方式通过 Intent 在两个 App 之间分享文件,取而代之的是通过 FileProvider 生成 content://Uri 。如果在 Android N 以上的版
Android FileProvider介绍
沧海龙腾LV的博客
01-16 927
Android 7.0 文件共享要使用FileProvider 对于面向Android 7.0的应用Android框架执行的StrictMode API政策禁止在您的应用外部公开file://URI。如果一项包含文件URI的intent离开您的应用,则应用出现故障,并出现FileUriExposedException异常。 对于文件访问在Android 7.0以前可以使用file://uri...
Android FileProvider解析
嘴巴吃糖了
04-25 1120
有部分同学只要是上传或者下载,只要用到了文件,不管三七二十一写个`FileProvider` 再说。 不是每一种情况都需要使用 FileProvider 的。啥?你问行不行?有没有毛病? 这…写了确实可以,没毛病!但是这没有必要啊。 如果不需要`FileProvider`就不需要定义啊,如果定义了重复的`FileProvider`,还会导致清单文件合并失败,需要处理冲突,从而引出又一个问题,解决`FileProvider`的冲突问题,当然这不是本文的重点,网上也有解决方案。
Android FileProvider的使用
西西里的木头
04-20 595
【代码】Android FileProvider的使用。
Android 7.0 应用间共享文件FileProvider代码
06-07
本篇文章将深入探讨`FileProvider`的工作原理以及如何在Android 7.0中使用它来实现应用间的文件共享。 一、FileProvider概述 `FileProvider`是Content Provider的一个子类,它提供了一种方式来安全地共享私有文件,...
android7.0文件根目录,Android7.0以上通过FileProvider访问文件
热门推荐
weixin_36477469的博客
05-26 5万+
//选择照片Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if (takePictureIntent.resolveActivity(getPackageManager()) != null) {String filename = "img_0001.png";File file = new File(...
Android FileProvider配置
qq_40283135的博客
06-10 1348
通常开发中,适配Android7.0主要就是适配其中文件访问权限。比如调用系统拍照,应用更新后安装功能都是涉及到。 在官方7.0的以上的系统中,尝试传递 file://URI可能会触发FileUriExposedException 下面有几种获取方式: ...
Android FileProvider配置与多节点问题解决
"基于Android FileProvider 属性配置详解及...FileProviderAndroid 7.0+中扮演了关键角色,通过正确的属性配置和路径定义,以及适当的代码适配,可以确保应用在不同版本的Android系统上都能正确地分享和访问文件
Android 适配 - FileProvider
weixin_33913377的博客
05-18 432
Android 适配 - FileProvider 前因 响应 Google 号召,App 适配 Android 8.0 之上。只包括我们 App 中遇到的情况进行记录。 参考了 FileProvider 文档和网络上可以搜索的一些资料。 适配核心 本适配的核心就是 FileProvider 的使用。 AndroidManifest 适配 在 application 节点里面增加一个 provid...
Android 适配 - FileProvider,耗时两个礼拜8000字Android面试长文
m0_66155412的博客
01-30 899
上面的写法基本是固定的,很多项都是可以修改,但不建议做,下面只是记录一下。 可修改项 1 android:name=“androidx.core.content.FileProvider” 上面为指定提供服务的 Provider 类。如上是 Android androidx 包提供的类,可以自定义。可以使用ContentProvider提供服务的目标即可。 可修改项 2 android:authorities="${applicationId}.fileProvider" 唯一字符串即可,上面为一般...
配置FileProvider
程序小渣渣
08-06 1043
 配置FileProvider 注意:如果您想兼容Android N或者以上的设备,必须要在AndroidManifest.xml文件配置FileProvider来访问共享路径的文件。 &lt;provider android:name="android.support.v4.content.FileProvider" android:authorities="${ap...
Android FileProvider
相思雨的博客
05-09 298
Android 7.0 已经出来太久了,关于其中有个比较大的变革是 文件读取权限的 变更处理,下面记录具体处理流程。 第一步: 如上图所示, 在 res 目录下面创建 xml目录,并且创建file_paths.xml 文件 文件具体内容为: <?xml version="1.0" encoding="utf-8"?> <paths> <...
AndroidFileProvider详解
HakuMaster的博客
10-25 2万+
Android 7.0之前,文件的Uri以file:///形式提供给其他app访问。Android 7.0之后,分享文件的Uri发生了变化。为了安全起见,file:///形式的Uri不能正常访问。官方提供了,FileProvider生成的Uri会以content://的形式分享给其他app使用。content形式的Uri可以让其他app临时获得读取(Read)和写入(Write)权限,只要我们在创建Intent时,使用添加权限。
android 打开微信分享图片
05-12
要在Android 设备上打开微信分享图片,需要进行以下步骤: 1. 首先,确保你的设备上已经安装了最新版本的微信应用程序。 2. 接下来,打开你的应用程序并登录到你的账户。 3. 打开你想要分享的图片,点击分享按钮。 4. 在分享的列表中选择微信,并在下一个屏幕上输入想要发送的联系人名称。 5. 点击“发送”按钮,图片会被发送到你的微信联系人。 6. 如果你的图片比较大或者网络连接较慢,可能会需要一些时间来完成发送。 7. 如果你需要在微信中分享多个图片,可以在应用程序中选择多个图片并重复上述步骤即可。 总的来说,在Android 设备上分享微信图片非常简单,只需要一些简单的步骤就能够完成。你可以享受到微信带来的便利,让你与你的朋友,家人以及同事分享珍贵的瞬间。
写文章

热门文章

  • (最新)Android(安卓)FileProvider配置实现文件由其他app(应用)打开或者分享 30320
  • 深度学习各类优化器详解(动量、NAG、adam、Adagrad、adadelta、RMSprop、adaMax、Nadam、AMSGrad) 29570
  • MATLAB的imwrite函数显示没有权限写入问题 26321
  • tensorflow-gpu完整安装(附各种报错解决办法) 23474
  • YOLOV3中k-means聚类获得anchor boxes过程详解 15707

分类专栏

  • 信号处理
  • 文献
  • 文献阅读与分享 1篇
  • 文献写作 1篇
  • 客户端与服务器开发
  • 客户端开发 2篇
  • 服务端开发
  • 编程语言与工具 2篇
  • Python 4篇
  • MATLAB 2篇
  • VS code 1篇
  • 深度学习 6篇
  • 目标检测 6篇
  • 神经网络 5篇
  • 机器学习 4篇
  • 环境配置/Bug解决 8篇
  • 硬件 1篇
  • 其他笔记

最新评论

  • (++i)+(++i)+(++i)和(i++)+(i++)+(i++)问题解答

    小张的dream: 明白了吗老哥,我也没看懂这点

  • (++i)+(++i)+(++i)和(i++)+(i++)+(i++)问题解答

    脱碳葡萄糖: 第二个vs2022运行是24

  • tensorflow-gpu完整安装(附各种报错解决办法)

    半只小闲鱼: 需要先吧cuda安装了?

  • 基于RLE的matlab图像无损压缩实现

    m0_67809629: 请问可以改变压缩比吗?

  • (++i)+(++i)+(++i)和(i++)+(i++)+(i++)问题解答

    song43999: 我去,为啥我在手机C++编译器里面输出是21啊

大家在看

  • Linux(4)——重定向、管道及tee命令 125
  • linux—基础命令及相关知识
  • 卷积编码器通过打孔(Puncturing)来修改码率
  • 约束长度、状态数以及清零过程背后的原理

最新文章

  • MATLAB配置C/C++库(Visual Studio,MinGW-w64 C/C++ 编译器)问题(包括低版本matlab配置高版本VS)
  • IEEE期刊latex文档最后一页参考文献双栏对齐
  • VS Code 第一次使用Latex参考文献出现问号且修改配置json文件也不管用
2023年1篇
2022年5篇
2021年2篇
2020年19篇
2019年7篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家商场美陈生产企业赤峰卡通玻璃钢雕塑生产厂家玻璃钢异形雕塑批发太原水果玻璃钢雕塑哪家便宜舟山玻璃钢仿铜雕塑定制江苏秋季商场美陈报价玻璃钢雕塑定做欢迎来电广东室内商场美陈供应温州商场美陈有哪些周口玻璃钢景观雕塑定制阳江玻璃钢雕塑规定闵行区拉丝玻璃钢雕塑服务介绍玻璃钢牌匾雕塑上饶玻璃钢花盆闵行区玻璃钢雕塑北京走廊商场美陈生产企业长宁区小型玻璃钢雕塑厂家供应上海玻璃钢雕塑修补招聘福建中庭商场美陈采购盲盒玻璃钢雕塑户外动物园玻璃钢雕塑订制山南玻璃钢花盆贵州景区玻璃钢雕塑优势玻璃钢雕塑质保合同广东季节性商场美陈销售厂家优惠的卡通雕塑玻璃钢正定玻璃钢雕塑厂开封玻璃钢雕塑厂家玻璃钢公园雕塑采购延庆玻璃钢花盆香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化