android - Kotlin - 互联网和位置权限问题
问题描述
我正在编写一个同时使用位置和互联网连接权限的 android 应用程序,我正在我的平板电脑上运行它。如您所见,我已将两者都包含在清单文件中。问题是,当在 MainActivity.kt 中调用 OnConnected() 函数时,如果计算结果为true,我无法在函数中继续进行。如果不相关,您能否给我一些提示以提供更多代码
AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
MainActivity.kt
override fun onConnected(p0: Bundle?) {
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
{
return;
}
//some code
}
解决方案
从 Android 6.0 开始需要请求权限,最好的方法是创建一个权限管理器类来处理它,然后如果用户接受了权限,则检查您的活动:
class PermissionManager private constructor() {
fun checkPermission(
activity: Activity,
permissionRequests: Array<String>?,
requestCode: Int
): Boolean {
permissionRequests?.let {
it.firstOrNull {
ContextCompat.checkSelfPermission(
activity,
it
) != PackageManager.PERMISSION_GRANTED
}?.apply {
ActivityCompat.requestPermissions(
activity,
permissionRequests,
requestCode
)
return false
}
}
return true
}
companion object {
val instance by lazy { PermissionManager() }
const val CAMERA_PERMISSION = 1
}
}
然后在您的活动中检查权限结果:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_ar)
//If the user has the permission accepted the next times
if (PermissionManager.instance.checkPermission(
this, arrayOf(
Manifest.permission.CAMERA
), PermissionManager.CAMERA_PERMISSION
)
) {
initLogic()
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
when (requestCode) {
PermissionManager.CAMERA_PERMISSION -> {
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
initLogic()
} else {
return
}
}
}
}
}
推荐阅读
- location - 新的 /24 IP 位置不正确
- asp.net - 多个项目的 ASP.NET ActiveDirectory 联合身份验证
- c# - 使用 C# 并行执行任务。我这样做对吗?
- javascript - 如何将类组件中的道具发送到功能组件?
- javascript - 使用按钮更改表格行顺序并非每次都有效
- docker - 将 fluentd kubernetes 日志传递给已经在物理服务器上运行的 elasticsearch 和 kibana
- javascript - 在 React 中,单击浏览器后退按钮时,我应该单击一个 DOM 元素(例如,按钮)并且应该在同一个组件中
- python - 刮脸 facebook 个人资料图片链接 python3 selenium
- highcharts - 使用 highstock 鼠标拉伸图表
- javascript - JavaScript 条件语句表现不同