专业网站建设品牌,十四年专业建站经验,服务6000+客户--广州京杭网络
免费热线:400-683-0016      微信咨询  |  联系我们

Andrioid FileProvider在Xamarin.Forms中的使用

当前位置:网站建设 > 技术支持
资料来源:网络整理       时间:2023/2/14 0:56:51       共计:3659 浏览

Android 7.0到来后,为了进一步提高私有文件的安全性,Android不再由开发者放宽私有文件的访问权限,之前我们一直使用"file:///"绝对路径来传递文件地址的方式,


在接收方访问时会触发SecurityException的异常。


因此在提供文件给第三方应用访问时,我们就会用到FileProvider。

FileProvider使用方法:


1.在AndroidManifest.xml里声明Provider

复制代码


<application android:label="AppTest.Android">

   <provider android:name="android.support.v4.content.FileProvider"

android:authorities="应用包名.fileprovider"

android:exported="false" android:grantUriPermissions="true">

     <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />

   </provider>

 </application>


复制代码


注意:其中android:authorities="应用包名.fileprovider" 如下使用最好android:authorities="${applicationId}.fileprovider",这样可以跟随包名变化。


2. 配置FileProvider文件共享的路径

复制代码


<?xml version="1.0" encoding="utf-8"?>

<paths xmlns:android="http://schemas.android.com/apk/res/android">

   <root-path name="root" path="" />

   <files-path name="files" path="" />

   <cache-path name="cache" path="" />

   <external-path name="external" path="" />

   <external-files-path name="name" path="path" />

    <external-cache-path name="name" path="path" />

</paths>


复制代码


说明:


在paths节点内部支持以下几个子节点,分别为:


   <root-path/>  代表设备的根目录new File("/");

   <files-path/>  代表context.getFilesDir()

   <cache-path/>  代表context.getCacheDir()

   <external-path/>  代表Environment.getExternalStorageDirectory()

   <external-files-path> 代表context.getExternalFilesDirs()

   <external-cache-path> 代表getExternalCacheDirs()




3. 配置完共享地址后,获取content uri的值,这个uri即提供给第三方进行访问的uri地址


例子为打开文件代码:

复制代码


       public void OpenFile(string path)

       {

           var context = Android.App.Application.Context;

           try

           {

               if (File.Exists(path))

               {

                   var file = new Java.IO.File(path);

                   var provider = context.PackageName + ".fileprovider";

                   

                   var uri = FileProvider.GetUriForFile(context, provider, file);

                   Intent intent = new Intent(Intent.ActionView);

                   intent.SetData(uri);

                   intent.AddFlags(ActivityFlags.GrantReadUriPermission);

                   intent.AddFlags(ActivityFlags.GrantWriteUriPermission);

                   Intent targetIntent = Intent.CreateChooser(intent, "打开文件");

                   targetIntent.SetFlags(ActivityFlags.NewTask);

                   context.StartActivity(targetIntent);

               }

           }

           catch(Exception e)

           {

               System.Diagnostics.Debug.WriteLine("OpenFile === " + e.Message);

           }

       }                    


复制代码




版权说明:
本网站凡注明“广州京杭 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
欢迎扫描右侧微信二维码与我们联系。
·上一条:Xamarin.Android之ContentProvider | ·下一条:Xamarin.Forms 使用本地数据库之 SQLite

Copyright © 广州京杭网络科技有限公司 2005-2025 版权所有    粤ICP备16019765号 

广州京杭网络科技有限公司 版权所有