我正在尝试升级一个为 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()
}
}
}
代码有点乱,但部分有效。 关于我缺少什么有什么建议吗?我一直在尝试不同的方法,但看起来我一直在原地踏步。