【发布时间】:2021-08-17 05:28:26
【问题描述】:
如何使用导航组件管理权限请求代码?
我引用了太多网站和堆栈链接,但没有一个有效,仍然显示已弃用的 Waring
Google 参考链接: https://developer.android.com/training/permissions/requesting#manage-request-code-yourself
代码::在片段中使用下面的代码
private fun checkMultiplePermissions() {
// check permission first
if (ActivityCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// request the permission
requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 100)
} else {
proceedAfterPermission() // has the permission.
}
}
override fun onRequestPermissionsResult(requestCode: Int,
permissions: Array<String>, grantResults: IntArray) {
myLog("log", "location code : $requestCode")
when (requestCode) {
100 -> {
// If request is cancelled, the result arrays are empty.
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted.
proceedAfterPermission() // permission was granted.
myLog("log", "location granted")
} else {
// permission denied.
myLog("log", "location denied")
}
return
}
}
}
Fragment.kt:完整代码
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
class FragmentPermission : Fragment() {
private var binding: FragmentPermisionBinding ?= null
// Kotlin
//implementation "androidx.fragment:fragment-ktx:1.3.4"
//https://developer.android.com/training/permissions/requesting#manage-request-code-yourself
// <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View {
binding = FragmentPermisionBinding.inflate(inflater, container, false)
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// request the permission
requestPermissions(arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), 100)
} else {
//proceedAfterPermission() // has the permission.
}
return binding!!.root
}
override fun onRequestPermissionsResult(requestCode: Int,
permissions: Array<String>, grantResults: IntArray) {
myLog("location3", "location code : $requestCode")
when (requestCode) {
100 -> {
// If request is cancelled, the result arrays are empty.
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted.
//proceedAfterPermission() // permission was granted.
myLog("location3", "location granted")
} else {
// permission denied.
myLog("location3", "location denied")
}
return
}
}
}
override fun onDestroyView() {
super.onDestroyView()
binding=null
}
}
【问题讨论】:
-
你关注guide directly above that one了吗?它展示了如何使用未弃用的 API。
-
我更新了我的完整代码
-
该代码未遵循guide that uses the non-deprecated APIs。您是否尝试过这些 API?
-
是添加了实现“androidx.fragment:fragment-ktx:1.3.4”并查看此主题:自行管理权限请求代码:developer.android.com/training/permissions/…(参考代码)
-
是的,这就是使用旧的、已弃用的 API 的指南……如果您想避免使用已弃用的 API,您必须上一节到我专门链接的部分。
标签: android kotlin android-permissions android-architecture-components registerforactivityresult