码迷,mamicode.com
首页 > 其他好文 > 详细

Andrioid FileProvider在Xamarin.Forms中的使用

时间:2018-03-09 01:39:29      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:r文件   tac   第三方应用   etc   tar   rip   mes   .com   文件共享   

Andrioid FileProvider在Xamarin.Forms中的使用

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>

 

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);
            }
        }                    
View Code

 

Andrioid FileProvider在Xamarin.Forms中的使用

标签:r文件   tac   第三方应用   etc   tar   rip   mes   .com   文件共享   

原文地址:https://www.cnblogs.com/devin_zhou/p/8520706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!