ACCESS_BACKGROUND_LOCATION 権限アプリケーションに関して、権限ダイアログ ボックスがポップアップ表示されない問題のレコード

Android 6.0 以降、動的に適用する必要がある権限の一般的な手順は次のとおりです。

1. 対応するアクセス許可をマニフェストに追加します;
2. ActivityCompatまたはContextCompatcheckSelfPermissionメソッドを使用して、アクセス許可があるかどうかを確認します;
3. アクセス許可がない場合は、ActivityCompatrequestPermissionsメソッドを使用して、対応するアクセス許可を申請します。
4. onRequestPermissionsResultメソッドを書き換えて、アクセス許可の承認結果を監視します。

位置決め権限については、通常、 ACCESS_COARSE_LOCATION 権限またはACCESS_FINE_LOCATION 権限を申請する必要がありますtargetSdkVersion >= 29の場合は、 ACCESS_BACKGROUND_LOCATION 権限も申請する必要があります
例えば:

private fun checkPermissions() {
    
    
        val mutableListOf = mutableListOf<String>()
        for (permission: String in permissions) {
    
    
            if (ActivityCompat.checkSelfPermission(
                    this,
                    permission
                ) != PackageManager.PERMISSION_GRANTED
            ) {
    
    
                mutableListOf.add(permission)
                Log.d("PermissionTag", "has no $permission permission")
            }
        }

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    
    
            if (ACCESS_BACKGROUND_LOCATION.isNotEmpty() && ActivityCompat.checkSelfPermission(
                    this,
                    ACCESS_BACKGROUND_LOCATION
                ) != PackageManager.PERMISSION_GRANTED
            ) {
    
    
                mutableListOf.add(ACCESS_BACKGROUND_LOCATION)
                Log.d("PermissionTag", "has no background location permission")
            }
        }
        if (mutableListOf.isNotEmpty()) {
    
    
            val permissions = mutableListOf.toTypedArray()
            ActivityCompat.requestPermissions(this, permissions, 0x01)
        }
    }

このうち、権限と ACCESS_BACKGOUND_LOCATION は権限定数として定義されています

val permissions = arrayOf(
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.CHANGE_WIFI_STATE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
)

val ACCESS_BACKGROUND_LOCATION =
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) Manifest.permission.ACCESS_BACKGROUND_LOCATION else ""

ただし、アプリのtargetSdkVersion>=30の場合、 ACCESS_BACKGOUND_LOCATION 権限を申請する場合は、 ACCESS_BACKGROUND_LOCATION 権限を申請する前に、 ACCESS_COARSE_LOCATION 権限またはACCESS_FINE_LOCATION権限を申請する必要がありますACCESS_BACKGROUND_LOCATION 権限がACCESS_COARSE_LOCATION 権限またはACCESS_FINE_LOCATION 権限と一緒に適用されている場合、権限適用ダイアログ ボックスは表示されません。他の権限が一緒に適用されている場合、すべての権限適用ウィンドウはポップアップしません。

解決策:
方法 1. targetSdkVersion<=2;方法 2. 最初にACCESS_COARSE_LOCATION 権限またはACCESS_FINE_LOCATION 権限
を申請し、アプリケーションが合格した後、ACCESS_BACKGROUND_LOCATION 権限を申請します。

ポジショニング権限の概要については、「ポジショニング権限」を参照してください。

おすすめ

転載: blog.csdn.net/fengyulinde/article/details/129556403