为安卓项目添加FileProvider

摘要:
简单记录android 7.0开始出现FileProvider。最新的Android Studio似乎无法使用androidsdk26,这意味着您必须使用FileProvider。您需要在Manifest.xml:其中@xml/PROVIDER_PATHS是要添加的xml文件。您需要在src/main/res_PATHS.xml文件下的xml目录中创建一个新的提供程序,内容:app模块build.gradle中的最后一段,确保包含以下内容:依赖项{implementation‘com.android.support:appcompat-v7:27.1.1‘implementation’com.android.com/support.install:constraint-layout:11.1.3‘implementation‘com.andrio.support:recycle view-v7:27.1.1’implementation”com.android:support:exif interface:27.1.1‘implantation’com.android.support:support:v4.2.7.1.1‘implementment testImplementation‘junit:junit:4.12’}来自javasnpe的代码,确保提供程序节点中的权限值与contenturi的基本域名一致。

简单记录

android7.0开始出现FileProvider。从一个小白角度看需要注意这几点:

  • Manifest.xml中添加provider节点
  • 添加xml文件
  • 模块的build.gradle中添加com.android.support包的支持
  • 确保provider节点中的authorities的值和content uri的基础域名一致

具体细节

以SNPE1.25的android程序为例。

最新的Android Studio似乎不能用 android sdk 26,也就意味着必须用FileProvider了。需要在Manifest.xml中的application节点内,添加一段:

        <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="snpe"
            android:enabled="true"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths" />
        </provider>

其中,@xml/provider_paths是需要添加的xml文件,需要在src/main/res下的xml目录(如果没有则新建)新建provider_paths.xml文件,内容:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path
        name="external_files"
        path="./" />
</paths>

app模块的build.gradle中,最后一段,确保包含如下:


dependencies {
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:exifinterface:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'

    implementation(name: 'snpe-release', ext:'aar')
    testImplementation 'junit:junit:4.12'
}

从snpe的java代码,确保provider节点中的authorities的值和content uri的基础域名一致。生成的uri将以content://com.example.myapp.fileprovider作为开头。

这里我从Model.java看到:public static final Uri MODELS_URI = Uri.parse("content://snpe/models");,因此Manifest.xml中设定 android:authorities="snpe"

参考

Android爬坑之旅之FileProvider(Failed to find configured root that contains)

免责声明:文章转载自《为安卓项目添加FileProvider》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇TX-LCN 分布式事务框架MyBatis魔法堂:Insert操作详解(返回主键、批量插入)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

用PopupWindow实现弹出菜单(弹出的菜单采用自定义布局)

     用PopupWindow实现弹出菜单是一个比较好的方式。当然我们还有一个类PopupMenu也能实现弹出菜单,但那个太过于局限了,所以不是很推荐。 这个实例的效果是这样的:点击按钮后,一个菜单从屏幕的右边滑入到屏幕中,点击按钮/空白处后菜单消失。 布局文件时一个按钮,我就不贴出代码了。下面是菜单的布局: <?xml version="1.0...

android学习ProgressBar的简单使用

android 提供的ProgressBar控件分为两种,一种是不带进度的进度条,一种是带进度的进度条,如果可以计算任务的完成量那么就用带进度条的,如果无法计算任务量,那么就使用不带进度的进度条。ProgressBar如果说只使用系统提供的,那就很简单,就只有那些属性方法,但是感觉比较难得就是ProgressBar的样式,一般做应用都不会直接使用系统提供的...

freeswitch用户整合(使用mysql数据库的用户表)

freeswitch是一款强大的voip服务器,可以语音和视频。但是它默认是采用/directory文件夹下的xml来配置用户的,对于整合到现有系统或者使用数据库保存用户信息的系统都是非常不方便的,所以,本文主要描述一种方法,解决freeswitch用户整合的问题。 完成这一任务需要三步,配置unixodbc,将用户验证转接到lua脚本,修改拨号计划使得...

Android自动化测试工具——monkey简介及入门

记得第二家单位的安卓开发在上线前都用monkey压几个小时,确实也能发现些问题,崩溃率低了些,没测过的确实可以压一压 搜了下资料,monkey确实很简单,发现问题自己搜下是什么问题,别一发现什么就跑去问开发 下面介绍下monkey的原理 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输...

JQuery实现省市区三级联动

[中国地区列表.xml下载] jquery版本:1.2.6,传说jquery1.3异步加载会出现卡的情况。 js内容: Codevar j = jQuery.noConflict();var prov="";var city="";var area="";j(function(){    j.get("/Js/Message/address.xml",f...

桌面小部件开发

AppWidgetProvider是android提供实现桌面小部件的类,本质是一个广播,即BroadcastReceiver。是继承关系 开发步骤: 1.在res/layout/下新建一个XML文件,命令为widget.xml,名称和内容可以自定义 <?xml version="1.0" encoding="utf-8"?> <Lin...