Android:检查是不是在另一个类中授予权限,而不是在 MainActivity

Posted

技术标签:

【中文标题】Android:检查是不是在另一个类中授予权限,而不是在 MainActivity【英文标题】:Android: Check if Permisson is granted in another Class, not in the MainActivityAndroid:检查是否在另一个类中授予权限,而不是在 MainActivity 【发布时间】:2021-12-19 17:31:02 【问题描述】:

我是 android 应用程序开发的新手,我真的很想知道是否有一种方法可以检查另一个类(一个收集一些位置数据的前台服务),如果在主 Activity 中提供了位置权限。

在我的主要活动中,我在应用启动时直接请求权限,如下所示:

private fun requestPermissions() 
        ActivityCompat.requestPermissions(
            this,
            arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION),
            PERMISSION_ID
        )
    


    override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) 
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if (requestCode == PERMISSION_ID) 
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) 
                Toast.makeText(this, "Right Permissions Granted", Toast.LENGTH_LONG).show()
            
        
    

它可以正常工作,我可以授予我的应用访问该位置的权限。要在我的另一个 I 类中使用一个函数,我需要检查是否授予了权限,我这样做是这样的:

fun dummy()
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) == PackageManager.PERMISSION_GRANTED
        ) 
        // do work that needs the location permission
      
    

但是,如果我尝试执行这个函数,我会得到一个空指针引用。我在这里错过了什么?

谢谢!

【问题讨论】:

在检查权限之前不要开始其他课程。 【参考方案1】:

您不能向服务请求权限。原因是当请求权限对话框出现时,用户自然会认为它属于前台应用程序。这种混乱是谷歌不允许这样做的原因。我最好的建议是启动一个 Activity,然后请求许可。

【讨论】:

以上是关于Android:检查是不是在另一个类中授予权限,而不是在 MainActivity的主要内容,如果未能解决你的问题,请参考以下文章

如何检查用户是不是已在 React Native Android 中授予相机权限?

在 Xamarin android 代码中找不到“ACCESS_BACKGROUND_LOCATION”权限。我需要检查用户是不是已授予此权限

已授予 Android 运行时权限,但仍被拒绝

Android 权限管理(持续整理)

如何知道用户之前是不是已经授予 Facebook SDK 权限

检查不同的应用程序是不是被授予权限