Require permission only for older android versions

2019-01-18 14:46发布

I want to some permissions only for older devices for compatibility. So I did some research and found this here:

android:maxSdkVersion
The highest API level at which this permission should be granted to your app. Setting this attribute is useful if the permission your app requires is no longer needed beginning at a certain API level.

For example, beginning with Android 4.4 (API level 19), it's no longer necessary for your app to request the WRITE_EXTERNAL_STORAGE permission when your app wants to write to its own application-specific directories on external storage (the directories provided by getExternalFilesDir()). However, the permission is required for API level 18 and lower. So you can declare that this permission is needed only up to API level 18 with a declaration such as this:

<uses-permission
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"
     android:maxSdkVersion="18" />

I tried to implemented that, but it did not work. So I build up this simple test:

<uses-permission
    android:name="android.permission.WRITE_SMS"
    android:maxSdkVersion="3" />

As far I understand this permission should been only required for devices with the API levels 1-3, but I get this permission request even on a API 18 device. Did I something wrong or is this feature broken?

2条回答
做个烂人
2楼-- · 2019-01-18 14:50

maxSdkVersion attribute was added in API level 19 (docs should have mentioned that). Ref.:

Introduce maxSdkVersion for <uses-permission>

This way an application can automatically sunset its permission requests when running on later versions of the OS where those permissions are no longer relevant, but may be alarming to the user. A canonical example is WRITE_EXTERNAL_STORAGE, which as of KLP becomes unnecessary for an app to use the external storage volume solely for its own large-data needs, without the need for actual file-system sharing among multiple apps.

Bug 9761041

Change-Id: I60130af3a108fe4a750c356038a1c8cb897e9c8b (missing, can be a Google internal change)

Looks like Android 4.4 was still not named as KK at that time :)

查看更多
可以哭但决不认输i
3楼-- · 2019-01-18 15:05

On my HTC with Android 5.0.2 external storaged failed when having the permissions and restrictions: android.permission.WRITE_EXTERNAL_STORAGE and maxSdkVersion = 18. So I needed to change maxSdkVersion to 22.

查看更多
登录 后发表回答