编辑:这不是一个重复的问题。毫无疑问,当您无法控制发送 Intent 的 Activity 时,我已经看到了如何解决这个问题的答案(在我的例子中,浏览器应用程序或文件浏览应用程序正在向我的应用程序发送 Intent )。更具体地说,这不是处理照片/图库。
这一直困扰着我的一个应用程序。我个人无法在任何设备上让它发生,但我可以从崩溃中看到它经常发生在其他人身上。
我的应用程序从外部应用程序接收到包含 ZIP 文件的 Intent 。我在 onCreate() 或 onNewIntent() 中捕获它:
Intent intent = getIntent();
if (intent != null && intent.getData() != null)
beginZipIntent(intent);
在 beginZipIntent() 中:
Uri data = intent.getData();
String filename = data.toString();
// Open input stream to copy ZIP to a temporary directory.
Uri uri = Uri.parse(filename);
InputStream inputStream = null;
try
{
inputStream = getContentResolver().openInputStream(uri); // This fails
}
catch (Exception e)
{
//...
}
在上面一行中,一些设备出现故障:
Permission Denial: reading com.android.providers.downloads.DownloadStorageProvider uri content://com.android.providers.downloads.documents/document/2772 from pid=26094, uid=10094 requires android.permission.MANAGE_DOCUMENTS, or grantUriPermission()
我无法控制发送 Intent 的应用程序/Activity 。我想通过立即抓取文件并将其保存到一个临时目录中我可以解决这个问题(如其他答案中所示) - 但没有。
我还添加了 android.permission.MANAGE_DOCUMENTS 但正如预期的那样(来自其他答案)它不起作用。
有人遇到过这个吗?似乎影响从 Android 4 到 7 的设备,因此不特定于一个操作系统版本。
最佳答案
好吧,我以前遇到过这个问题,我有一个在 android 7.1 上运行的 oppo 设备,它运行良好,顺便说一句,它在三星上使用相同版本的 android 时出现问题,所以为了解决这个问题,我要求读取存储如果需要,请获得许可,它会起作用。
代码爱好者的例子:
public class CheckPermissions {
public static boolean hasPermission(int PERMISSION_REQUEST, String permission, Context context) {
if (ContextCompat.checkSelfPermission(context,
permission)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale((Activity) context,
permission) &&
ContextCompat.checkSelfPermission(context,
permission)
!= PackageManager.PERMISSION_GRANTED) {
return false;
} else {
ActivityCompat.requestPermissions((Activity) context,
new String[]{permission},
PERMISSION_REQUEST);
}
return false;
} else {
return true;
}
}
}
并检查权限:
if (CheckPermissions.hasPermission(REQUEST_CODE,
Manifest.permission.READ_EXTERNAL_STORAGE, this))
// todo read the saved URI
我还希望您将权限添加到 list 中:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
并且也使用写入权限来写入文件。
关于android - 权限拒绝 : reading com. android.providers.downloads.DownloadStorageProvider 需要 android.permission.MANAGE_DOCUMENTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139191/
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
我正在关注Hartl的railstutorial.org并已到达11.4.4:Imageuploadinproduction.我做了什么:注册亚马逊网络服务在AmazonIdentityandAccessManagement中,我创建了一个用户。用户创建成功。在AmazonS3中,我创建了一个新存储桶。设置新存储桶的权限:权限:本教程指示“授予上一步创建的用户读写权限”。但是,在存储桶的“权限”下,未提及新用户名。我只能在每个人、经过身份验证的用户、日志传送、我和亚马逊似乎根据我的名字+数字创建的用户名之间进行选择。我已经通过选择经过身份验证的用户并选中了上传/删除和查看权限的框(而不
我正在为我的用户实现一些rubyonrails代码推特内容。我正在创建正确的oauth链接...类似http://twitter.com/oauth/authorize?oauth_token=y2RkuftYAEkbEuIF7zKMuzWN30O2XxM8U9j0egtzKv但在我的测试帐户授予对twitter的访问权限后,它会弹出一个页面,上面写着“您已成功授予对.我不知道用户应该在哪里输入此PIN以及他们为什么必须这样做。我认为这不是必要的步骤。Twitter应该将用户重定向到我在应用程序设置中提供的回调URL。有谁知道为什么会这样?更新我找到了thisarticle声明我需
我正在关注Ryan的RailsCast第339集。我已经安装了rbenv并且可以运行ruby-v。我退出了我的session,当我试图返回时(通过root的sudeployer,我得到了这个错误/home/deployer/.rbenv/bin/rbenv:line20:cd:/root:Permissiondenied这是rbenv文件:#!/usr/bin/envbashset-e[-n"$RBENV_DEBUG"]&&set-xresolve_link(){$(type-pgreadlinkreadlink|head-1)"$1"}abs_dirname(){localcwd="
如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答
我在运行Ubuntu10.04LTS的远程VPS机器上以生产模式运行RubyonRails3.0.9(在开发模式下,我在MACOSSnow上使用RoRLeopard),我想知道如何管理以下场景。我使用Apache2和PhusionPassenger并且我将虚拟主机设置为如下所示:ServerNameproject_name.comDocumentRoot/srv/www/project_name.com/publicAllowOverrideallOptions-MultiViews此外,我使用Paperclipgem,由于网上很多人在生产模式下使用它,我在处理(图像)文件时遇到以下错
我用谷歌搜索了这个问题并浏览了关于这个问题的相关帖子。我认为这不是Rails/Ruby问题,但不确定下一步该怎么做。irb(main):007:0>Net::HTTP.get_response("http://www.apple.com","")SocketError:getaddrinfo:nodenamenorservnameprovided,ornotknownfrom/Users/dan/.rbenv/versions/2.2.3/lib/ruby/2.2.0/net/http.rb:879:in`initialize'否则没有网络问题。apple.com在浏览器中加载正常。这
我将服务器更新为ruby2.1.1,并使用Capistrano部署到我的服务器。但是,当我部署时,我收到各种错误。每次我玩我的部署代码时都会改变。以下是我当前遇到的问题。更新/新问题重新安装rvm和ruby后,我在部署时遇到了不同的问题。这是我当前的deploy.rb文件。require"bundler/capistrano"require"rvm/capistrano"set:rvm_type,:systemset:rvm_ruby_string,"ruby-2.1.1"require'bundler/capistrano'#Capistranoset:default_env
我创建了一个包含自定义gemset的项目特定.rvmrc文件(使用命令rvm--rvmrc--create1.9.2@registration):#excerptof.rvmrc...environment_id="ruby-1.9.2@registration"if[[-d"${rvm_path:-$HOME/.rvm}/environments"\&&-s"${rvm_path:-$HOME/.rvm}/environments/$environment_id"]]then\."${rvm_path:-$HOME/.rvm}/environments/$environment_id