问题标签 [android-6.0-marshmallow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 无法获得 WRITE_SETTINGS 权限
当我在 Android M Preview 3 上的目标 API 为 23 时,我似乎无法获得 Manifest.permission.WRITE_SETTTINGS 权限。
请求权限不会弹出我期望的对话框,但是如果我在没有此权限的情况下进行以下调用,
除非我没有权限,否则电话会。
我不知道从这里去哪里。23 有新的铃声 API 吗?还是这种权限更改只是使任何非系统应用程序无法更改铃声?
android - 何时在 android 6.0 (Marshmallow) 上请求 READ_EXTERNAL_STORAGE
我的应用程序需要WRITE_EXTERNAL_STORAGE
和READ_EXTERNAL_STORAGE
权限才能按需使用位于非应用程序特定文件夹中的用户图像。所以我想知道在打开将启动文件 I/O 操作的屏幕/服务之前,我应该什么时候请求授予权限?
android - Android M - 自定义权限对话框样式
在实现新的 Android M 权限模型时,我注意到权限对话框不尊重我的 styles.xml 的主题。
在我的 styles.xml 中,我像这样覆盖对话框和 alertdialog 样式:
是否可以更改主题?
还是因为这是设备设置中的系统对话框?
android - 新的Android Marshmallow中的Icon有什么用
android M中Icon类的确切用途是什么。它类似于VectorDrawable
(在Lollipop中引入)。
android - Lvl 库和 android marshmallow
由于删除了缺少 apache 的东西,Lvl 库不再在 Android Marshmallow 上编译。您可以添加useLibrary 'org.apache.http.legacy
,但这只是一种临时解决方法。问题是这种方法:
NameValuePair
并且URLEncodedUtils
没有找到。
什么是新的"way"
?如何用与新 Android 版本兼容的新代码替换此调用?
android - android.permission.WRITE_SETTINGS 自 Android 6 起具有 protectionLevel="signature"
我正在 Android 6 模拟器下测试我的应用程序,我发现它开始崩溃并出现以下异常:
经过进一步研究,我发现根据http://developer.android.com/reference/android/Manifest.permission.html#WRITE_SETTINGS上的 javadoc它有protectionLevel="signature"
我猜在以前版本的 Android 中,保护程度较低(normal
或者dangerous
,我不记得了)。
我的问题是:有什么办法可以克服这种变化?在https://developer.android.com/reference/android/R.attr.html#protectionLevel写着
仅当请求应用程序使用与声明权限的应用程序相同的证书签名时,系统才会授予该权限。如果证书匹配,系统会自动授予权限,无需通知用户或请求用户明确批准。
但是在涉及系统权限时,我不明白如何满足这个条件。
android - Android 6 上的存储访问权限有何变化?
背景
Android 在如何处理 SD 卡和存储方面有很多变化:
- API 3 - 您获得所有访问权限,无需权限
- API 4-15 - 您需要使用 WRITE_EXTERNAL_STORAGE,并且您可以获得所有访问权限。
- API 16-18 - 如果您只想阅读,请使用 READ_EXTERNAL_STORAGE
- API 19-20 - 您无法读取或写入辅助外部存储(SD 卡),除非您的应用程序是系统应用程序,或者您有 root。
- API 21-22 - 为了访问 SD 卡,您需要请求用户许可,并使用 DocumentFile API 而不是 File API。正如我在这里、这里和这里所写的那样,这引发了很多问题。
从 API 23 (Android 6) 开始,事情似乎又发生了变化……
问题
对于 API 23,至少有两件事是新的并且与存储相关:
- “可采用的存储设备” - 用户可以选择将 SD 卡设置为类似于主外部存储的东西。
- 作为新权限机制的一部分(在运行时请求权限),存储似乎也是用户需要确认的权限。这适用于 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE
由于没有带有 SD 卡的 Android 6 设备,并且由于模拟器本身并没有真正使用 SD 卡的能力,因此仍然不可能知道发生了什么。
问题
SD 卡会使用 File-API 而不是 DocumentFile 获得访问权限吗?
如果我想访问所有外部存储路径(包括 SD 卡),这是否意味着我需要两次请求此权限:一次用于主外部存储,一次用于 SD 卡?
在手动授予权限之前,是否可以通过任何方式访问 SD 卡上的文件?
假设用户选择使用“可采用的存储设备”,那么检索应用程序文件路径的各种功能意味着什么?例如:getFilesDir、getExternalFilesDir、...?getExternalFilesDirs 的顺序会因此而改变吗?
当用户将应用程序从/移到 SD 卡(使用“可采用的存储设备”)时,应用程序的文件会发生什么?SD卡上的应用程序文件呢?他们会留下来吗?或者他们会搬到某个地方吗?
例如,如果应用程序在 SD 卡上具有“file1.txt”,路径为“/storage/extSdCard/Android/data/appPackageName”,并且它有一个文件“file2.txt”(甚至同名)在路径“/storage/emulated/0/Android/data/appPackageName”上的主外部存储上。切换后,这些文件会发生什么?如果有的话,它们将如何合并到一个文件夹中?
将应用程序移动到 SD 卡(使用“可采用的存储设备”)时,是否意味着不会使用内部存储?
android - 普通权限是具有非普通权限的权限组的一部分。这是否授予所有组
所以我一直在阅读Android开发者官方网站上关于新权限模型的权限文档。让我感到困惑的一件事是权限组。他们说,如果您的用户接受此权限组的权限,则该组中的所有权限都被授予。
现在,如果此权限组具有“正常权限”怎么办。例如,getAccounts 是一个普通权限,这意味着它是在安装时授予的。这是否会默认授予所有权限组(包括非正常权限组,例如 getContacts)?根据文档,它应该!但这没有意义,因为 getContacts 不是正常的权限。
知道在这种情况下这是如何工作的吗?
谢谢
android - 可以在 Android Marshmallow (API 23) 的运行时权限模型中同步请求权限吗?
假设您有这样的方法:
在整个应用程序中,如果您想将文件保存到外部存储,您可以执行类似...
这是一个简化的例子,所以不要谈论我关于阻止 UI、正确处理异常等的案例。如果你不喜欢文件保存,你可以想象一个getContact()
或getPhoneState()
什么。关键是它是一个需要权限的操作,它返回一些值,并且在整个应用程序中使用。
在 Android <= Lollipop 中,如果用户已安装并同意授予android.permission.WRITE_EXTERNAL_STORAGE
或其他任何内容,一切都会好起来的。
但是在新的 Marshmallow (API 23)运行时权限模型中,在将文件保存到外部存储之前,您应该 (1) 检查权限是否已被授予。 如果不是,可能 (2)显示请求的理由(如果系统认为这是一个好主意)与祝酒或其他任何东西,并且 (3) 要求用户通过对话授予权限,然后基本上坐下来等待打回来...
(所以你的应用程序坐在那里,等待......)
(4) 当用户最终响应对话框时,onRequestPermissionsResult()方法将触发,您的代码现在 (5) 必须筛选他们实际响应的权限请求,无论用户说是还是否(对我的知道没有办法处理“不”与“不并且不要再问”),(6)首先弄清楚他们试图完成的事情,这促使整个请求许可过程,所以程序终于可以 (7)继续做那件事了。
要了解用户在步骤 (6) 中尝试执行的操作,需要事先传递一个特殊代码(“权限请求响应”),该代码在文档中描述为权限请求类型的标识符(相机/联系人/等) .) 但在我看来更像是“具体来说,当你意识到你需要请求权限时你正在尝试做的事情”代码,因为相同的权限/组可以在你的代码中用于多种目的,所以获得许可后,您需要使用此代码将执行返回到适当的位置。
我可能完全误解了这应该是如何工作的——所以请让我知道我是否离题了——但更大的一点是我真的不知道如何考虑用/saveFile()
由于异步“等待用户响应”部分,前面描述的方法。我考虑过的想法很老套,而且肯定是错误的。
今天的Android Developer Podcast暗示可能会有一个同步解决方案指日可待,甚至有人谈到了 Android Studio 中一种神奇的、一步 alt-enter 类型的“添加权限请求”工具。尽管如此,如何将运行时许可过程推入一个saveFile()
或其他任何东西 - 我正在考虑以下内容:
checkPermission()
因此,如果用户没有并且拒绝授予权限,上述操作将失败。也许可以使用循环checkPermission()
来尝试最多询问 3 次或其他内容,或者如果该方法处理了一个理智的不烦人的策略,那就更好了。
这样的事情可能吗?可取的?任何这样的解决方案会阻止 UI 线程吗?从播客看来,谷歌可能会有一个类似的解决方案即将推出,但我想了解是否有什么东西——一个便利类、一个模式、什么东西——不需要每个人都必须重构所有需要权限的操作,我必须假设这可能会变得非常混乱。
抱歉这个冗长的问题,但我想尽可能完整。我会把我的答案从广播中删除。谢谢!
更新:这是上面提到的播客的成绩单。
大约在41:20 收听。在本次讨论中:
粗略的成绩单:
Tor Norbye(工具团队):“所以对于开发人员来说,这似乎不应该做很多工作。但我理解部分问题是这些不是同步调用,对吧?所以你必须——实际上改变你的 Activity 的编写方式,让它有一个回调——所以它真的有点像一个状态机……对于这个状态,你—— ”
Poiesz(产品经理):“啊-我想-有一个-可能有同步响应的选项-- ”
诺拜:“哦。那会让事情—— ”
Poiesz:“我可以在内部与人们交谈。我记得有一次关于同步的讨论——但我们可以找到答案。 ”
Norbye:“是的。事实上,我们可能应该把它变成工具。在那里你有一个简单的重构...... ”
然后他谈到了在工具中使用注释来确定哪些 API 需要权限..(到目前为止,这在 IMO 中还没有那么好用),以及他希望有一天这些工具在发现未经检查的“危险”时如何实际生成所需的代码" 方法调用:
Norbye:“ ......那么如果你也在 M 上,它会说,‘嘿,你实际上是在检查这个权限还是在捕捉安全异常?’,如果你不是,我们会说“你可能需要做一些事情来请求这里的许可。” 不过,我想要的是有一个快速修复,你可以去“CHING!” 它插入了所有正确的东西来询问,但是当我看到事情的时候,这需要重组很多东西——添加接口和回调,改变流程,而我们做不到。但如果有一个简单的同步模式作为临时的东西或永久的东西,那会[很棒]。 ”