READ_EXTERNAL_STORAGE 在23之上的权限获取 在两个app上同样的申请 不同的结果 why

来源:互联网 发布:东吴证券怎么样 知乎 编辑:程序博客网 时间:2024/06/08 13:00

网上所有的信息都显示 在api>=23 权限需要动态申请,

READ_EXTERNAL_STORAGE

可是目前手头上有两个app, 一个直接在Androidmanifest上定义就直接有了权限, 如A

另一个在Androidmanifest 申请后,23之下可以申请到权限,23之上就不能申请到权限 B


是个好的问题


进一步定位问题:

将A中 READ_EXTERNAL_STORAGE删掉依然可以获取到权限,这可就奇怪了,看了下 另一个和External_storage相关的权限是WRITE_EXTERNAL_STORAGE, 如有write权限自然读的权限就有了,所以将A中write 权限删掉,果然 没有权限了。看来问题出在 WRITE_EXTERNAL_STORAGE上。

可是我B上也申请了WRITE_EXTERNAL_STORAGE呀。

问题调研继续进行中

调研完毕,虽然结果我不想承认 是因为targetSdkVersion的原因


在A里 是22 即6.0之下, B是25 


在我的认识中:

targetSdkVersion 是最优适配的api版本,即所有框架层代码都是以 targetSdkVersion的版本的方法为标准,如果此app装进api 16/25的机器,那16/25中方法名相同但功能不同的功能以targetSdkVersion的方法为准。可是权限的自动申请和动态申请是以app装的机器有关。但是明显,此次的问题颠覆了我根深蒂固觉得认识很清楚的知识点,但是这就是学习过程。


那么真实的targetSdkVersion 到底是什么呢?


targetSdkVersion 是Android系统提供向前兼容的主要手段。随着Android系统的升级,某个系统的api或模块的行为可能会发生改变,但是为了保证Apk的行为和以前API相同,所以设置targetSdkVersion,只要targetSDKVersion不变,及时apk安装在新的Android系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的向前兼容(感觉和我的理解一样呀)


那类似这种需要手动的权限我们都改了target偏小一点就能避开 听起来像个bug 而且主要APi方法改动也不是很大 那是不是targetSdkVersion偏小一点更好??

那也不一定,如果targetSdkVersion小的话 那么23的新特性也就没了

阅读全文
0 0
原创粉丝点击