类型不匹配:推断类型<未提供名称>但应为上下文



我告诉你,这是通过制作一个应用程序,我试着验证它是否有权限从一个片段中保存文件,但它给了我一个错误的声明上下文(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请求许可

相关内容

最新更新