ActivityCompat.requestPermissions无法正常工作

10

调用ActivityCompat.requestPermissions不会显示UI对话框。

ActivityCompat.requestPermissions(MainActivity.this, new String[]{"Manifest.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);

然而,如果我将minSDKversion更改为23并运行

requestPermissions(new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS);

对话框出现了。为什么?顺便说一下,要在模拟器上运行它需要将模拟器定向到API 23。


1
REQUEST_CODE_ASK_PERMISSIONS不能太大,尝试将其设置为“100”。 - saisam
@saisam 什么?这毫无意义,而且文档中也没有提到。http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html - Andrew G
请在gradle中将targetSdk设置为23,以显示运行时权限。 - Sangeet Suresh
3个回答

8

为什么?

可能是因为你在第一个代码片段中使用了错误的权限名称。请使用以下任一代码:

Manifest.permission.READ_SMS

或者使用:

"android.permission.READ_SMS"

不要使用:

"Manifest.permission.READ_SMS"

已经尝试过了 - 给我“无法解析符号READ_SMS”。这就是为什么我尝试了上面发布的字符串版本。 - Zvi
@Zvi: "给我报错“无法解析符号 READ_SMS”" -- 你是否添加了 android.Manifestimportandroid.Manifest.permission.READ_SMSAPI Level 1 就已经存在了。如果你阅读了 READ_SMS 的文档,你会发现 android.Manifest.permission.READ_SMS 常量的字符串值是 "android.permission.READ_SMS" - CommonsWare
你说得对,我确实没有那个导入。 我太习惯于Android Studio提示导入了,以至于没能检查它是否导入了该活动中所需的所有库。也许这是AS的一个错误,因为它没有提示导入该库,当我搜索READ_SMS时,也没有找到任何解决方案涉及到导入。谢谢。 - Zvi
今天我遇到了这个问题,我在AndroidManifest.xml文件中使用了Manifest.permission.X,并且也进行了正确的配置。但是,当我调用ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.POST_NOTIFICATIONS}, 1);时,屏幕上没有任何提示... - Ted
谢谢,我确实有这个:defaultConfig { applicationId "test.myapp" minSdkVersion 29 targetSdkVersion 33 versionCode 60 versionName "1.60" }我正在考虑是否在onCreate中运行是问题所在,但似乎不是。也许需要另一个SO问题 =) - Ted
显示剩余2条评论

2
新版本的Android Studio会在创建新项目时自动将AppCompat库和Android Design Support库添加到build.gradle文件中的依赖项部分。如果没有添加,请在应用程序的build.gradle文件的依赖项部分中添加以下两行。
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'

1

请检查您的Android清单文件中是否已添加所需权限,就像在Android M之前一样,只有这样才能获得预期的行为。

将权限添加到您的清单中:

<uses-permission android:name="android.permission.READ_SMS" />

@CommonWare已经给出了答案-请参见我的评论,时间为2015年9月21日。 - Zvi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接