Android应用程序不请求许可,自动拒绝它

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

我正在尝试升级一个为 Android 5 设计的旧应用程序,但我有点迷失了。

应用程序需要存储权限才能从用户选择的位置读取 JSON 文件并写入图像(使用 Screenshotty 在应用程序内截取的屏幕截图https://github.com/bolteu/screenshotty

问题是,在 Android 10 及以下版本上,我收到一条提示,要求我允许存储访问。 在较新的版本(在 13 和 14 上尝试过),它直接进入定义权限,我无法保存任何屏幕截图。 不过,我确实可以访问存储并读取 JSON 文件。

截至今年 8 月,我升级了 gradle、依赖项和所有内容以满足 Google Play 要求:

buildToolsVersion = "34.0.0"
compileSdk 34
minSdkVersion 21
targetSdkVersion 34

我的权限列表:

<!-- Scoped Storage Permissions -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_READ_MEDIA_IMAGES" />

<!-- Only include this if necessary for broad file access -->
<!-- <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> -->

主要活动

private var screenshotManager: ScreenshotManager? = null
private val REQUEST_CODE_STORAGE_PERMISSION = 1

override fun onCreate(savedInstanceState: Bundle?)
{
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)
    {
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
            REQUEST_CODE_STORAGE_PERMISSION
        )
    }
    else
    {
        hasStoragePermission = true
    }

    screenshotManager = ScreenshotManagerBuilder(this)
        .withPermissionRequestCode(888) //optional, 888 is the default
        .build()
}

override fun onRequestPermissionsResult(requestCode: Int, 
                                        permissions: Array<out String>, 
                                        grantResults: IntArray) 
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)

    if (requestCode == REQUEST_CODE_STORAGE_PERMISSION)
    {
        if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)
        {
            Toast.makeText(this, "Permission Granted", Toast.LENGTH_SHORT).show()
            hasStoragePermission = true
        }
        else
        {
            // I get this all the time on newer Android versions
            Toast.makeText(this, "Permission Denied", Toast.LENGTH_SHORT).show()
        }
    }
}

代码有点乱,但部分有效。 关于我缺少什么有什么建议吗?我一直在尝试不同的方法,但看起来我一直在原地踏步。

android permissions storage screenshot
1个回答
0
投票

自 Android 5 以来,存储发生了很大变化,我建议您再次阅读文档,了解如何使用文件等。

Android 11+

WRITE_EXTERNAL_STORAGE
不执行任何操作,因此您必须使用较新的 范围/共享存储

这也意味着您当前读取 json 文件并读取用户想要存储图像的位置的操作可能不再起作用。

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