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

Android 10:可以直接上传Uri,但稍后重试时会失败,并出现"Permission denial“异常

Android 10引入了一项新特性,即可以直接上传Uri。Uri是一种统一资源标识符,它可以表示各种类型的数据,如图片、视频、音频等。通过直接上传Uri,开发者可以更方便地在应用程序中进行文件上传操作。

然而,有时在稍后重试上传时,可能会遇到"Permission denial"异常。这是因为Android 10对应用访问外部存储的权限进行了一些限制。为了保护用户的隐私和数据安全,Android 10在应用访问外部存储时引入了分区存储的概念。

分区存储意味着每个应用都有自己的独立存储空间,无法直接访问其他应用的文件。因此,在Android 10上,如果应用程序尝试直接上传Uri,可能会因为没有访问Uri所指向文件的权限而导致失败并出现"Permission denial"异常。

为了解决这个问题,开发者可以采取以下措施:

  1. 使用SAF(Storage Access Framework):SAF是Android提供的一种文件访问框架,可以允许应用程序通过系统提供的文件选择器与用户交互来选择要操作的文件。通过使用SAF,可以确保应用程序具有对所选文件的访问权限,从而避免"Permission denial"异常。
  2. 请求动态权限:如果应用程序需要直接访问某个Uri所指向的文件,可以在运行时请求相关的动态权限。通过请求适当的权限,应用程序可以获得对文件的访问权限,从而能够成功上传Uri。
  3. 将文件复制到应用程序的内部存储空间:如果应用程序需要对文件进行频繁的操作,可以将文件复制到应用程序的内部存储空间中。内部存储空间是应用程序的私有空间,可以直接访问其中的文件,而不需要额外的权限。

总结起来,Android 10支持直接上传Uri,但在稍后重试时可能会遇到"Permission denial"异常。为了解决这个问题,开发者可以使用SAF、请求动态权限或将文件复制到应用程序的内部存储空间中。这样可以确保应用程序具有对文件的访问权限,从而避免上传失败的问题。

对于开发者来说,腾讯云提供了丰富的云服务和产品,可以帮助开发者构建和管理各种云计算应用。具体在这个问题中,腾讯云的对象存储COS(Cloud Object Storage)可以作为一个推荐的产品,它提供了高可靠性、低成本的云端存储服务,适用于存储和管理各种类型的数据。您可以通过以下链接了解腾讯云COS的详细信息:https://cloud.tencent.com/product/cos

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

相关·内容

  • 【专业技术】Android安全嘛?

    与此 同时, Android 还 在此基础上进行扩展,提供了 permission 机制,它主要是用来对 Application 可以执行的某些具体操作进行权限细分和访问控制,同时提供了 per-URI...匹配不同过,则抛出异常。 9. 检查调用者自己是否有权限访问这个 Uri 。如果没有,抛出异常。 10....如果 package 接受到外来访问者的操作请求,那么可以调用这些接口进行权限检查。一般情况下可以把这些接口的检查接口分为两种,一种是返回错误,另一种是抛出异常。...) 检查某个 pid 和 uid 的 package 是否拥有 uri 的读写权限,如果失败则抛出异常,打印消息 。...这样再安装是就会出现不一致。 3.1 Android Package 签名原理 android 中系统和 app 都是需要签名的。

    1.2K90

    【专业技术】Android如何保证安全?

    与此 同时, Android 还 在此基础上进行扩展,提供了 permission 机制,它主要是用来对 Application 可以执行的某些具体操作进行权限细分和访问控制,同时提供了 per-URI...匹配不同过,则抛出异常。 9. 检查调用者自己是否有权限访问这个 Uri 。如果没有,抛出异常。 10....如果 package 接受到外来访问者的操作请求,那么可以调用这些接口进行权限检查。一般情况下可以把这些接口的检查接口分为两种,一种是返回错误,另一种是抛出异常。...) 检查某个 pid 和 uid 的 package 是否拥有 uri 的读写权限,如果失败则抛出异常,打印消息 。...这样再安装是就会出现不一致。 3.1 Android Package 签名原理 android 中系统和 app 都是需要签名的。

    1.3K60

    AndroidQ兼容性适配指南

    android:name="android.permission.USE_FULL_SCREEN_INTENT" /> 当手机处于亮屏状态时, 会显示一个通知栏, 当手机处于锁屏或者灭屏状态时,会亮屏并直接进入到...如果应用以Android 10或更高版本为目标平台,则您必须在应用的清单文件中声明ACCESS_BACKGROUND_LOCATION权限并接收用户权限,才能在应用位于后台时接收定期位置信息更新。...Android10适配的时候可以通过requestLegacyExternalStoragec使用兼容模式; Android11适配可以通过preserveLegacyExternalStorage让Android10...及一下的设备使用兼容模式,但Android11及以上的设备无论是覆盖安装还是重新安装都无法使用兼容模式; 可以通过调用 Environment.getExternalStorageState() 查询该卷的状态...Rename not supported异常 //Pixel 6a Android13可以正常重命名 if (checkUriFlag(uri, DocumentsContract.Document.FLAG_SUPPORTS_RENAME

    7.1K30

    基于 RxJava2+Retrofit2 精心打造的 Android 基础框架 XSnow

    、失败重试间隔时间的一系列配置。...支持失败重试机制,可配置失败重试次数以及重试时间间隔。 支持根据Tag中途取消请求,也可以取消所有请求。...上传下载 简介: 该库提供的上传下载功能比较简洁实用,基本能满足单个线程下的常用相关操作,如果需要多线程和断点续传功能就需要上层实现,也可以依赖如RxDownload库。...使用示例: 由于上传下载功能需要用到网络相关,所以也需要像网络那样进行初始化和添加全局配置。下面是上传下载使用示例,具体效果可以查看demo。...适配器可满足所有基于BaseAdapter的适配器组装,使用方便,易拓展;视图状态管理包含空视图、网络异常、其他异常的重试以及视图切换机制。

    1.2K70

    6.0 运行时权限处理

    用户可以随时取消授权给你的权限。 6.0中权限分为两类 普通权限和危险权限,普通权限在AndroidManifest 文件中注册就可以得到,对于能获得用户隐私的权限属于危险权限。...如果 targetSDKVersion 是22 安装好之后 Android系统就知道这个App在系统API22一下都测试过了并且能正确运行的,假如这个App运行在了Android6.0系统上,Android...return true; } return false; } 检查权限 在去请求权限之前 应该先检查一下系统 的版本 如果系统版本在6.0以上再去请求权限,如果不在就不去请求,直接使用..."},10); 在请求权限之前最好是跟用户解释清楚为什么要使用这个权限 ,用时候用户并不清楚为什么使用权限 就会被拒绝,如果一个权限被请求一次以上 在系统申请权限的Dialog会出现一个不再提醒的复选框...= "android.permission.READ_SMS"; //检查当前系统版本是否在6.0以上 if (checkVersion()){ int result

    74780

    手机GPS开启

    满怀希望的再次运行,结果还是一样的问题: java.lang.SecurityException: Permission denial: writing to secure settings requires...android.permission.WRITE_SECURE_SETTINGS 看来,Google封死了直接调用Settings的路了,事实上我又试着使用反射来直接调用setLocationProviderEnabled...localUri); return PendingIntent.getBroadcast(paramContext, 0, localIntent1, 0); } 由于这是反编译的结果,略微有点混乱,但还是可以看出思路...: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 private void isGPSEnable() { /* 用Setting.System来读取也可以,只是这是更旧的用法...但如果目标手机运行的版本是2.1或以下的话,那么就只能使用变通的方法来实现了。这1方法在Android官方的Wiki上已经有人提出了,详情请见:Issue 7890。

    1.1K10

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

    FileUriExposedException 错误截图 二、问题原因 为啥会出现这个崩溃信息呢?...那是因为,在调用系统相机的时候我们使用 Uri.fromUri(file) 来获取 URI 并传递给 调用系统相机的intent,代码如下: Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE..., Activity.DEFAULT_KEYS_DIALER); 这种方式在 7.0 以前的版本中并没有任何异常,but , 从 7.0 (API 24) 之后这种方式就有问题了 ,因为 Uri.fromUri...(file) 得到的是 以“ file:// ” 开头的文件在本地的真实路径,Android 认为直接将这个真是地址对外暴露是有很多的风险的,所以,就会抛出上面截图中的异常信息。...封装过之后的 URI,这样就可以有效的避免相关风险。

    68320

    从TargetApi22升级到TargetApi26注意事项

    5种类型的type将会被废弃,不能使用,但运行在低于api26版本的手机上还是可以使用以下的type,所以需要对api26的悬浮窗进行兼容处理: TYPE_PHONE TYPE_PRIORITY_PHONE..., Uri.parse("package:" + getPackageName())); startActivityForResult(intent, 10); } 2.私有文件的文件权限不在放权给所有的应用...MODE_WORLD_READABLE:该文件的内容可以被其他程序读取; MODE_WORLD_WRITEABLE:该文件的内容可被其他程序读、写 3.App对外无法暴露file://类型的URI...如果你使用Intent携带这样的URI去打开外部App(比如:打开系统相机拍照),那么会抛出FileUriExposedException异常 String cachePath = getApplicationContext...面向 Android N 或更高版本的应用在尝试访问 COLUMN_LOCAL_FILENAME 时会触发 SecurityException。

    86210

    Android使用Flow检测版本升级自动下载安装

    本文长度为8342字,预计阅读10分钟 前言 检测新的版本升级这个好几年前就做过了,不过最近项目中要移植过来,因为原来直接在别的项目中做的,不方便直接拷贝,所以准备做个Demo移植过来,并介绍下怎么实现的.../vnd.android 04 测试访问 添加完MIME类型后,重启一下IIS,来测试下是否可以成功了,Blazor的网站配置的端口为8027,由于是本机,所以网址直接是localhost 测试检测升级信息...apk 输入apk包的地址后直接弹出迅雷的下载,说明都没问题了 如果访问中出现500的情况,可以考虑txt文件和apk的那个Download的目录权限问题,修改一下权限为完全访问。...intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) uri =...catch函数只能捕获上游的异常,无法捕获下游的异常。 catch函数捕获到异常后,collect函数无法执行。可以考虑通过catch函数执行emit操作处理后续逻辑。

    1K30

    RxHttp ,比Retrofit 更优雅的协程体验

    易用性 在易用性,个人认为,RxHttp就是神一般的存在,无论你是加密请求、上传、下载、进度监听、失败重试、动态Baseurl、自定义解析器等等任意请求场景,皆遵循请求三部曲,只要记住请求三部曲,就掌握了...本文仅介绍RxHttp + 协程的使用,更多功能请查看 RxHttp 让你眼前一亮的Http请求框架 RxHttp 完美适配Android 10/11 上传/下载/进度监听 RxHttp 全网Http缓存最优解...= 200或data == null时,就抛出ParseException异常,并带上了msg、code字段,所以我们在异常回调通过强转,就可以拿到这两个字段 接着回答第二个问题,异常回调里的it是什么对象...} else if (this is JsonSyntaxException) { //请求成功,但Json语法异常,导致解析失败 "数据解析失败,请检查数据是否正确"...,并且直接走异常回调,不会重试。

    2.2K20

    Android BLE 基础框架全新改版

    ; 支持操作设备数据失败重试; 支持绑定数据收发通道,同一种能力可绑定多个通道; 支持注册和取消通知监听; 支持配置最大连接数,超过最大连接数时会依据 Lru 算法自动断开最近最久未使用设备; 支持配置扫描...效果展示 使用介绍 权限配置 6.0 以下系统不需要配置权限,库中已经配置了如下权限: permission android:name="android.permission.BLUETOOTH..."/> permission android:name="android.permission.BLUETOOTH_ADMIN"/> 而如果手机系统在 6.0 以上则需要配置如下权限: permission-sdk....setConnectRetryInterval(1000)//设置连接失败重试间隔时间 .setOperateRetryCount(3)//设置数据操作失败重试次数...更多关于广播包解析可以参考Android BLE学习笔记中数据解析部分。

    2.1K70

    android调用相册和摄像头_网页调用摄像头拍照

    -- 往SDCard写入数据权限 --> permission android:name="android.permission....--请求访问使用照相设备--> permission android:name="android.permission.CAMERA" /> 2 设置标志(回传码) // 拍照回传码 public...choosePhoto(){ Intent intentToPickPic = new Intent(Intent.ACTION_PICK, null); // 如果限制上传到服务器的图片类型时可以直接写如...startActivityForResult(intentToPickPic, GlobalVariable.GALLERY_REQUEST_CODE); } 8 界面回调方法 用于将得到的照片处理 //当拍摄照片完成时会回调到...mTempPhotoPath)); 静默升降摄像头问题 若使用了下面的代码 则可能会导致手机升降摄像头 这样会让用户觉得你私自调用了摄像头 泄漏了他的隐私 要注意~ 1.摄像头调用:用户没有拍照操作,但app

    76320
    领券