首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android6.0文件提供程序在FileProvider.getUriForFile上不工作空指针

是由于在Android 6.0及以上版本中,应用程序需要动态请求权限来访问外部存储设备上的文件。如果没有正确处理权限请求,就会导致空指针异常。

解决这个问题的方法是按照以下步骤进行操作:

  1. 在AndroidManifest.xml文件中添加文件提供程序的权限声明。在<manifest>标签内添加以下代码:
代码语言:xml
复制
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  1. 创建一个FileProvider类来扩展android.support.v4.content.FileProvider。在项目的Java包下创建一个新的类,例如MyFileProvider,并添加以下代码:
代码语言:java
复制
public class MyFileProvider extends FileProvider {
}
  1. 在AndroidManifest.xml文件中注册FileProvider。在<application>标签内添加以下代码:
代码语言:xml
复制
<provider
    android:name=".MyFileProvider"
    android:authorities="${applicationId}.myfileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>
  1. 创建一个file_paths.xml文件来指定文件提供程序的路径。在res/xml目录下创建一个新的XML文件,例如file_paths.xml,并添加以下代码:
代码语言:xml
复制
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="." />
</paths>
  1. 在代码中使用FileProvider.getUriForFile()方法来获取文件的URI。例如:
代码语言:java
复制
File file = new File(Environment.getExternalStorageDirectory(), "example.jpg");
Uri fileUri = FileProvider.getUriForFile(context, context.getPackageName() + ".myfileprovider", file);

在上述代码中,"example.jpg"是要访问的文件名,context是当前上下文对象。

这样,你就可以通过FileProvider.getUriForFile()方法来获取文件的URI,而不会出现空指针异常。同时,确保在使用文件URI时,正确处理权限请求,以确保应用程序具有访问外部存储设备的权限。

推荐的腾讯云相关产品:腾讯云对象存储(COS)

腾讯云对象存储(COS)是一种高可用、高可靠、强安全的云存储服务,适用于存储和处理任意类型的文件,包括文本、图片、音视频等。它提供了简单易用的API接口和丰富的功能,可以满足各种存储需求。

产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android图片或拍照选择图片功能实例代码

res文件夹下创建xml文件夹,xml文件夹下面再创建拍照图片的存放路径,名称可以随便起,但是要记得取的时候要一致。...Context context, File file) { Uri uri; if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) { uri = FileProvider.getUriForFile...否则报指针异常 return uri; } 注意: android:authorities="${applicationId}.fileprovider"里面一定要填写build.gradle里面的...BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片 return bitmap; } 总结 大致过程如上所示,但是一定要Android6.0...图片或拍照选择图片(本地下载) 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。

99120

Android适配全面总结(二)----版本适配

AndroidManifest中列出的危险权限,并且应用程序已经同一权限组中具有另一个危险权限,系统会立即授予权限,而不会与用户进行任何交互。...---- 三、Android6.0如何申请动态权限 开发中经常会遇到拍照的权限申请,这里就讲一下如何动态设置拍照权限: //别忘记在清单文件也加上CAMERA权限 //<uses-permission...(由于Android6.0开始要动态申请权限,所以别忘了,这里就不写了,主要讲FileProvider的使用) //适配7.0的fileprovider,imgfile是图片文件路径 public void..., uri); }else{ //7.0+使用FileProvider.getUriForFile这个api uri=FileProvider.getUriForFile...在运行 Android 8.0 或更高版本的设备使用此权限时,恶意下载程序将无法骗取用户安装未获得预先授权的应用,所以我们需要加入安装apk文件的权限。

2.3K10

Android7.0后FileProvider升级安装包导致FileUriExposedException的异常

fileerrorurl.png 出问题就开始解决吧 1.第一步当然你要访问文件是要权限的,这个Android6.0后可要动态授权哦,这里不要忘了android.permission.REQUEST_INSTALL_PACKAGES...,res下新建一个xml文件夹,最后xmll文件夹中新建file_paths.xml文件。...外部存储空间应用私有目录下的 cache/ 目录,等同于 Context.getExternalCacheDir();--> 表示应用程序内部...context) { //此处file应为apk下载的完整路径文件,这里下载了外部存储的私有缓存文件夹下, // 你可以选择其他存储地址如:外置SD卡等,但是要注意与....fileprovider"属性值 // 参数3 = 一步中共享的apk文件 Uri apkUri = FileProvider.getUriForFile

2.4K31

Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口。本文除了能适配6.0及以上系统,主要还提供6.0以下设备适配解决方案。...Google官方支持指纹识别的标准接口是Android6.0开始的,如果各个厂商都升级到6.0并且硬件都给予支持,那么我们按照标准的指纹识别接口使用就可以了。...如果厂商Google之前就已经做了指纹识别,那这种情况肯定不能使用官方标准接口,如果要适配这种设备,只能使用厂商提供的第三方指纹识别SDK。       ...进程异常捕获,因为鬼都不知道厂商系统内部会发生什么崩溃出来(红米note3,系统5.0或者5.1的,调用mFingerprintManager.hasEnrolledFingerprints()方法时,内部抛出指针异常...特殊设备的坑 Letv X500 Android 6.0,API23       按正常的套路回调onAuthenticationError,onAuthenticationFailed,理论应该是识别失败的情况

1.4K80

Android6.0之后的权限机制对App开发的影响

2、手机休眠期间,原本系统闹钟服务AlarmManager中设定好的定时任务,即使定时的时刻到达,也要等到苏醒期间才会得到执行。...具体到编码工作,只能在build.gradle中采用externalNativeBuild方式编译jni工程,即在jni目录下提供专门的Android.mk编译文件,由该mk文件配置jni文件的编译规则...;倘若在build.gradle的defaultConfig节点下补充ndk的编译说明,则编译出来的so文件无法Android6.0正常调用。...4、Android6.0对蓝牙功能的校验也变严格了,即使已经AndroidManifest.xml声明蓝牙的相关权限如BLUETOOTH_ADMIN和BLUETOOTH,App也不能正常检测到附近的蓝牙设备...如果没有打开定位功能,即使App授予了wifi权限,getScanResults方法返回的wifi列表仍然是的。 点此查看Android开发笔记的完整目录

81220

Android7.0适配心得

应用间共享文件 Android7.0系统,Android 框架强制执行了 StrictMode API 政策禁止向你的应用外公开 file:// URI。...另外,推荐大家使用开源工具库TakePhoto, TakePhoto是一款Android设备获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库。...无论是应用部分还是全部低电耗模式限制,系统都会唤醒设备以提供简短的维护时间窗口,在此窗口期间,应用程序可以访问网络并执行任何被推迟的作业/同步。...Android 7.0 应用了以下优化措施: Android 7.0 应用不会收到 CONNECTIVITY_ACTION 广播,即使你manifest清单文件中设置了请求接受这些事件的通知。...您甚至可以使用 JobScheduler API 来适应内容提供程序变化。 另外,大家如果想了解更多关于后台的优化可查阅后台优化。

1.3K50

Android M 特性 Doze and App Standby模式详解

谷歌表示,Nexus5和Nexus6测试,当屏幕处于关闭状态,平均续航时间提高30%; 3. 版本要求:Android6.0(API level 23)及其更高版本; 4....CPU密集型服务节省电池; 防止应用程序访问网络,推延应用程序工作,同步,和标准的警报; 系统定期提供一个短暂的时间让应用程序完成延迟的工作活动,在这个时间片里,系统将提供维持性窗口应用程序访问网络,...Google Cloud Messaging(GCM)是一个云到设备的服务,可以让你支持实时云端服务和Android设备应用程序之间的消息传递。...,GCM连接服务器将邮件发送到该设备; 4.设备,所述客户端应用程序根据该特定平台实现接收该消息。...除了GCM,Android6.0及更高版本还提供了Doze模式白名单列表,通过设置应用程序进入白名单列表可逃脱Doze模式的各种限制。

6.9K11

Android 通过代码安装 APK的方法详解

APK 开发中,通过 Java 代码来打开系统的安装程序以安装 APK 并不是什么难事,一般的 Android 系统都有开放这一功能。...对于通过代码打开系统安装程序这一功能的限制,其分水岭 Android7.0,即 Android N 。通常在 Android N以上的系统使用一种做法,以下则使用另一种做法。...APK安装过程中于 data 目录下创建的专属目录自然是其私有数据无疑。另外,只要是应用程序中封装的 File 对象,不管这个文件本身是不是由该程序创建的,那这个文件都属于该程序的“私有数据”。...下面就来看看在高版本系统中暴露“私有数据”给其它程序的方法。 高版本中,Android7.0 及以上,开放(暴露)私有数据的唯一方式是通过 ContentProvider 来实现。...根据第 1 步中的示例代码,我们需要新建一个 file_paths.xml 文件。这里我的apk是保留在程序的file文件加下得,该文件的内容如下所示: <?

8K21

Android 权限机制与适配经验

Android6.0以前,Android的权限机制比较简单,开发者AndroidManifest文件中声明需要的权限,APP安装时,系统提示用户APP将获取的权限,需要用户同意授权才能继续安装,从此APP...这里很多人会有一些疑惑,如果针对旧版本的APPAndroid6.0机型运行或者针对Android6.0适配了的APPAndroid6.0以下机型运行,会有什么表现呢?是如何兼容的呢?...2、适配了Android6.0的APP,低版本Android系统运行的时候,仍然采用安装时授权的方案,但是开发者需要注意的是,权限申请的代码逻辑只应该在Android6.0及以上的机型被执行。...用户如果选择了拒绝,下一次需要声明该权限的时候,Google建议APP开发者给予用户更多的说明,因此提供了下面这个API,这个方法返回值使用过程中会发现有点纠结(具体解析见下面代码块说明)。...类似的案例还有一个,就是某厂商的手机管家,会一直提示QQ音乐尝试读取应用程序列表。其实,我们并没有读取应用程序列表,只是调用了PackageManager相关的一些API,就是触发这个告警。

2.7K10

Android6.0新特性

theme: channing-cyan Android6.0可使设备续航时间提升30% 应用权限管理 Android6.0以前 权限管理是通过三方APP来实现管理,Android6.0中该功能成为系统级...小于23的应用授予程序所申请的权限,如果targetSdkVersion小于236.0系统中是不会有问题的。...权限管理分为两类一种是涉及用于隐私的权限,用户不能取消该类权限的授权;另外一种是涉及用于隐私的权限,需要进行用户弹框授权,同一权限组的一个权限被授权,该组内的其他权限也会自动被授权。...Android 密钥库变更 Android 密钥库提供程序不再支持 DSA。但仍支持 ECDSA。...系统会通过监听用户一段时间内,是否没有再操作app,来判定某一个app是否是处于空闲状态。当设备处于非充电状态,系统将会断开网络连接,并中断所有app的数据同步和工作(相当于认为设备是空闲的)。

70730

FileProvider 的使用(Failed to find configured root that containsstorageemulated0DCIM )

Add on 2020-9-24: 可以参考源码 CameraDemo 的file_provider分支的代码。...RESULT_OK) { //处理拍照的结果 processTakePhoto(photoFile.getPath()); } break; default: break; } } 但是发现在7.0的系统直接崩溃了...res目录下新建一个xml目录,xml目录下面新建一个xml文件。我新建的文件名叫filepaths.xml <?xml version="1.0" encoding="utf-8"?...本站仅提供信息存储空间服务,拥有所有权,承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。...发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/222862.html原文链接:https://javaforall.cn

1.2K20

Android 11适配指南之系统相机拍照、打开相册

前言 适配前台程序员必不可少的工作之一,且可能要花大量的时间精力。 何为前台程序员,是面向用户的一端,包括前端、移动端、PC等等。...何为适配,适配就是当我们的开发环境、运行环境等发生变化的时候,程序依然能稳健运行。...而适配中最难为程序员的就是Android了,除了开发环境、运行环境等因素之外,因为Android开源的原因,还要适配各大厂商。。 而适配条件之多,经常让Android程序员为之头疼。...private fun doCrop(sourceUri: Uri) { Intrinsics.checkParameterIsNotNull(sourceUri, "资源为"...应用可以不需要读写权限的情况下,访问自己的分区,执行读写操作,卸载之后分区文件也相应删除,所以就不能有把缓存文件放到竞品的文件夹下这种操作了,还是乖乖的吧。

3.5K30

如何优雅地申请Android运行时权限

这包括读取或写入用户的私有数据(例如联系人或电子邮件)、读取或写入其他应用程序文件、执行网络访问、使设备保持唤醒状态等。...之前 Android6.0之前,应用权限仅需代码里AndroidManifest.xml中声明便可以获得,不需要征求用户的同意。...有的App一股脑申请了大量的权限,甚至一些工具类应用居然申请短信、录音、读取手机文件等敏感权限。当然,那也是流氓软件最盛行的年代,无数应用在后台偷鸡摸狗,盗取用户敏感数据。...Android6.0之后 Android6.0之后,应用权限被谷歌分成了两类,正常权限和危险权限。...因为是在你实现的方法加注解来请求权限,所以代码相对要简洁一些,我们基本要使用到以下几个注解。 ?

3.1K20

App工程从Eclipse迁移到Android Studio的问题总结

一般导入成功的话,接下来便能按照正常操作步骤来编译和运行了;可是老大难的旧工程往往会产生这样那样的错误,需要逐一进行格式转换或者配置调整工作。...com.android.support:appcompat-v7:25.2.0]” 2、关于compileSdkVersion 如果代码用到了httpclient库(如微信支付),则编译会报错“程序包...此时需要修改build.gradle,文件的dependencies节点下增加以下依赖库: compile 'org.apache.httpcomponents:httpcore:4.4.1...API保持一致 1、有的类和函数Android5.0之后才提供,个别迟至Android6.0之后才提供,此时要注意在代码中增加对Build.VERSION.SDK_INIT的版本号判断。...修改主工程的build.gradle,dependencies节点下增加依赖库(注意把compile改为provided,表示这个库已经提供了): provided 'com.android.support

1.5K30

Android版本更新知识(检测、升级,6.0,7.0,8.0)总结

apkUri = FileProvider.getUriForFile(getApplicationContext(), "com.csti.cetx.fileProvider", file);//...---- 第一步,注册一个 FileProvider 第二步,添加共享目录 res/xml 目录下新建一个 provider_paths 文件,用于存放应用需要共享的目录文件。...这个 provider_paths 文件的内容类似这样:( 注:path 里为即可 ) :内部存储空间应用私有目录下的 files/ 目录,等同于 Context.getFilesDir() 所获取的目录路径...Uri apkUri = FileProvider.getUriForFile(getApplicationContext(), "你的包名.fileProvider", file);//AndroidManifest...= null) { if(Build.VERSION.SDK_INT>=24) {//判读版本是否7.0以上 Uri apkUri = FileProvider.getUriForFile

88510

android: API24 及以上版本调用系统相机时报:FileUriExposedException 的解决

这一次的封面是我家乡的蒙山鹰窝峰,中学那会儿一直想要一张这个图的明信片,后来也不知道放哪里了。。。...最近除了忙工作,还在搜集关于金三角的资料,之后的某一天会发一篇关于“金山角”的文章,敬请期待。...7.0 以前的版本中并没有任何异常,but , 从 7.0 (API 24) 之后这种方式就有问题了 ,因为 Uri.fromUri(file) 得到的是 以“ file:// ” 开头的文件本地的真实路径...getUriFromFile( ) 方法接收三个参数,第一个参数是 Context 对象,第二个参数是 唯一标识字符串,也就是清单文件provider 节点中声明的 android:authorities...我们使用 getUriFromFile( ) 获取Uri 之后, 7.0 及以后的版本中调用系统相机时将不会在崩溃,示例代码如下: 三、示例代码: (1)、清单文件中注册 FileProvider

63620
领券