我告诉你,这是通过制作一个应用程序,我试着验证它是否有权限从一个片段中保存文件,但它给了我一个错误的声明上下文(this)与类型不匹配的错误消息:推断类型是但上下文是预期的。
任何帮助都是发自内心的感谢
我的代码override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
downloadButton.setOnClickListener(object : View.OnClickListener {
// here I would like to move to FormActivity
override fun onClick(v: View?) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),
100
)
} else {
saveImageToStore()
}
} else {
saveImageToStore()
}
}
})
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
if (requestCode == 100) {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
saveImageToStore()
} else {
Toast.makeText(this, "ASDASDA", Toast.LENGTH_SHORT).show()
}
}
}
用requireContext()
代替this
。片段不是上下文。您需要使用requireContext()
而不仅仅是context
,因为context
是一个可空的Context?
。在onActivityCreated()
函数中使用不可空的requireContext()
是安全的。
您需要替换:
ContextCompat.checkSelfPermission(this,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
ContextCompat.checkSelfPermission(requireContext(),android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
和
ActivityCompat.requestPermissions(
this, arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
ActivityCompat.requestPermissions(
requireActivity(), arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE),100)
ContextCompat.checkSelfPermission()
需要上下文引用作为第一个参数,您正在通过使用'this'传递片段引用
ActivityCompat.requestPermissions()
需要一个活动引用作为第一个参数,你正在通过使用'this'传递一个片段引用
您应该尝试使用registerForActivityResult(RequestPermission())
在运行时请求权限的新方法https://developer.android.com/training/permissions/requesting请求许可