在Android4.4(KitKat)上,谷歌对SD卡的访问进行了严格的限制。
从Android Lollipop(5.0)开始,开发人员可以使用一个新的API,它要求用户确认是否允许访问特定的文件夹,正如Google-Groups的帖子所写的那样。
关于新的API我有几个问题:
很多好问题,让我们深入探讨。:)
这里有一个在KitKat中与存储访问框架交互的很棒的教程:
https://developer.android.com/guide/topics/providers/document-provider.html#客户端
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
if (resultCode == RESULT_OK) {
Uri treeUri = resultData.getData();
DocumentFile pickedDir = DocumentFile.fromTreeUri(this, treeUri);
// List all existing files inside picked directory
for (DocumentFile file : pickedDir.listFiles()) {
Log.d(TAG, "Found file " + file.getName() + " with size " + file.length());
}
// Create a new file and write into it
DocumentFile newFile = pickedDir.createFile("text/plain", "My Novel");
OutputStream out = getContentResolver().openOutputStream(newFile.getUri());
out.write("A long time ago...".getBytes());
out.close();
}
}
getContentResolver().takePersistableUriPermission(treeUri,
Intent.FLAG_GRANT_READ_URI_PERMISSION |
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
支持DocumentProvider可以随时撤销权限,例如删除基于云的文档时。发现这些被吊销的权限的最常见方法是当它们从前面提到的ContentResolver.getPersistedUriPermissions()
中消失时。
只要清除了授予中涉及的应用程序的应用程序数据,权限也会被撤销。
是的,action_open_document_tree
意图允许您递归访问现有的和新创建的文件和目录。
http://en.wikipedia.org/wiki/volume_serial_number
从Lollipop开始,应用程序可以访问真正的SD卡(在Kitkat上无法访问,之前的版本还没有正式支持),正如我在这里询问的那样。 因为现在已经很少看到支持SD卡的Lollipop设备了,因为模拟器没有这个功能(或者真的有吗?)为了模拟SD卡支持,我花了很长时间来测试它。 不管怎样,似乎不是使用普通的文件类来访问SD卡(一旦获得了权限),而是需要使用URI,使用DocumentFile。 这限制
我尝试了,但说CreateFile失败:java.io.ioException:open失败:EACCES(权限被拒绝) 即使在添加权限后也使用-permissionandroid:name=“android.permission.write_external_storage” Android版本4.4.2
SD卡设备的使用 SD卡设备的使用 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-09-25 misonyo first edition. *//* * 程序清
问题内容: 我想通过Selenium Webdriver启动Firefox浏览器时禁用通知。我找到了这个答案,但是它已被弃用,在Firefox上对我不起作用(尽管它在Chrome上可以完美运行)。 我将这种依赖关系用于我的 pom.xml : 问题答案: 如果您的用 例 是禁用 通知,则可以使用 以下选项: 要在 Firefox* 浏览器客户端中禁用 推送通知 ,请使用 FirefoxProfil
我在使用网络视图(使用Android 5.1上的Nexus 9进行测试)时遇到了一些问题。我读到,在Android JellyBean发布前后,通过检查名为“增强网络可访问性”的首选项,向网络视图添加了对讲支持。我在系统设置中找不到这个首选项。 在我们的应用程序中,专注于Web视图只是读取“WebView”,并且不提供其他选项。 TalkBack是否在KitKat中删除了对Web视图的支持?如果没
我正在为一个现有的代码库创建一个Python包装器,其中包含一个DLL和头文件。我用的是SWIG。 代码库有多个结构指针定义,如下所示: 在本例中,未在其他任何地方定义。DLL中的所有其他函数都将会话作为输入。如果我尝试在SWIG生成的代码中的任何地方引用,我会得到未定义的编译错误。我需要一种在Python代码中访问值的方法。 我试过使用cpointer。i和pointer_函数是宏,但这不起作用