Android SDK 34 AppCompatActivity.requestPermissions 不显示权限对话框,但 Android SDK 29 会显示

问题描述 投票:0回答:1

最初我试图用 targetSdkVersion 30 更新我已经发布的应用程序,以符合 Google 的 targetSdkVersion 33 要求。这简直惹出了各种麻烦。我必须更新我的 IAP 调用以及 Advert 调用。我设法更新到新的 API 方法并开始测试,却发现请求权限不再有效! (对令人沮丧的咆哮表示歉意)。

我了解权限流程;在 AndroidManifest.xml 中声明您需要的内容,然后检查是否应该ShowRequestPermissionRationale(),然后调用 requestPermissions()。最后在 onRequestPermissionsResult() 中处理用户响应。

在旧版本、Android 29(平板电脑)和 Android 34(手机)上,一切都按预期运行。启动应用程序时,文件权限对话框会在应用程序启动时显示。

现在有了更新版本,Android 29(平板电脑),文件权限对话框显示,应用程序继续。对于 Android 34(手机),文件权限对话框不会显示,并且在调试时会立即调用 onRequestPermissionsResult() 方法并返回 PERMISSION_DENIED 响应。该应用程序的行为就像用户从权限对话框中选择了“拒绝并不再询问”选项一样。用户永远没有机会接受,因此应用程序通知用户并关闭,因为保存和共享编辑的照片是应用程序的主要功能。 令我困惑的是,相同的构建可以在 Android 29 上运行,但不能在 Android 34 上运行。因此,我倾向于认为问题出在 Android 34 上,除非需要对新 API 采取一些不需要的额外步骤在 Android 29 上。

还有其他人遇到过类似的问题吗?如果是的话,你是怎么解决的?

编辑:在我的 AppCompatActivity 中,我请求:

String[] permissionList = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE }; requestPermissions( permissionList, READ_STORAGE_RESPONSE );


java android permissions
1个回答
0
投票

增强的运行时权限:

Android 33 引入了更严格的权限处理,需要更明确的用户同意以及对敏感权限更清晰的理由解释。

用于权限处理的新 API:

requestPermissions 方法已被弃用。建议使用新的 ActivityResultLauncher API 来请求权限。

第1步:

确保您已在 AndroidManifest.xml 文件中声明所需的 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。

第2步

private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestMultiplePermissions() ) { permissions -> if (permissions.getOrDefault( Manifest.permission.READ_EXTERNAL_STORAGE, false ) ) { // Permission granted } else { // Handle permission denial } } fun requestPermissions() { requestPermissionLauncher.launch( arrayOf( Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE ) ) }

提供明确的理由:

1.如果shouldShowRequestPermissionRationale返回true,请在再次请求之前向用户解释为什么需要权限。

2.使用清晰简洁的对话框来解释权限的目的以及它们将如何使用户受益。

处理“不再询问”案件:

1.如果用户之前拒绝了权限并选择了“不再询问”,请将他们引导至应用设置以手动授予权限。

2.提供有关如何导航到应用程序设置并启用权限的清晰说明。

其他注意事项:

1.目标SDK版本:虽然与权限问题没有直接关系,但请确保您的应用程序的targetSdkVersion设置为33以符合Google的要求。

如果执行这些步骤后问题仍然存在,请提供有关您的代码和权限请求流程的更具体详细信息,以获得进一步帮助。

© www.soinside.com 2019 - 2024. All rights reserved.