是否可以使用 Api 23 (6.0) 进行编译并维护旧的权限系统(安装时)?

Posted

技术标签:

【中文标题】是否可以使用 Api 23 (6.0) 进行编译并维护旧的权限系统(安装时)?【英文标题】:It is possible to compile with Api 23 (6.0) and to maintain the old permission system (install-time)? 【发布时间】:2016-05-10 21:19:34 【问题描述】:

我在官方的 android 博客上读到了这篇文章:

权限更改使用 Marshmallow,权限已从 安装时到运行时。这是 SDK 23+ 的强制性更改, 这意味着它将影响所有开发人员和所有应用程序目标 安卓 6.0。

所以...如果您使用 Android 6.0 (api 23) 编译但目标是 Android 4.4 (api 20),是否可以保留旧的权限系统?

我的意思是这样做:

    compileSdkVersion 'Google Inc.:Google APIs:23'
    buildToolsVersion "23.0.1"

    defaultConfig 
        minSdkVersion 10
        targetSdkVersion 20
    

目前我的项目的必要条件是维护旧的权限系统并以 sdk 版本 20 为目标(因为我需要维护旧的通知系统,如果您的目标 sdk 版本高于 20,则必须使用新的通知系统) .那么...如果我以 sdk 版本 20 为目标,我可以使用 Api 23 编译并维护旧的权限系统吗?

谢谢

【问题讨论】:

targetSdkVersion 应该决定是否使用新的权限模型。不过,这似乎很容易测试;只需在运行 Android 6.0 或更高版本的设备(或模拟器)上运行应用程序。 【参考方案1】:

是的,如果 targetSdkVersion 设置为 设置 手动禁用个别权限。虽然 Android 6.0 会在用户尝试这样做时发出警告,但他们仍然可以撤销。

现在的问题是用户撤销权限后您的应用会崩溃吗?

当我们调用一个需要用户撤销权限的函数时 targetSdkVersion 小于 23 的应用程序,不会出现异常 被抛出。相反,它只会什么都不做。对于函数 该返回值,它将返回 null 或 0 取决于 案子。虽然应用程序不会因调用 功能。它可能仍然会因该应用程序接下来的操作而崩溃 与那些返回值。

【讨论】:

这对于我们的项目来说是一条非常重要的信息,我们在其中运行我们的应用程序不是手机,而是在运行 Android 6 的基于 Qualcomm Snapdragon 芯片组的板上。我们无法设置权限由于没有显示器,因此它是无头设置。我刚刚将 targetSDK 更改为 22,现在该应用程序不要求权限。非常感谢您的回答。电路板制造商应该从他们的 Android 映像中完全禁用权限模块,我相信他们最终必须这样做,否则这些没有显示器的电路板将来不会很实用。

以上是关于是否可以使用 Api 23 (6.0) 进行编译并维护旧的权限系统(安装时)?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 6.0 Marshmallow (API 23) 上不推荐使用 getColor(int id)

Android 6.0 api 23 - 获得许可后,我的位置为空[重复]

是否可以使用 Visual Studio 6.0(VC98 编译器)构建使用清单指定依赖关系的应用程序?

AndroidHttpClient 和 HttpGet API 在 Android 6.0 Marshmallow (API 23) 中已弃用

FusedLocationApi.getLastLocation 总是返回 null(android 6.0,api 23)

解决方法:android 6.0(api 23) SDK,不再提供org.apache.http.*(只保留几个类)