# PermissionController

Artifact: [androidx.health.connect:connect-client](https://developer.android.com/jetpack/androidx/releases/health-connect) [View Source](https://cs.android.com/search?q=file:androidx/health/connect/client/PermissionController.kt+class:androidx.health.connect.client.PermissionController) Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

*** ** * ** ***


```
public interface PermissionController
```

<br />

Known direct subclasses [FakePermissionController](https://developer.android.com/reference/androidx/health/connect/client/testing/FakePermissionController)

|---|---|
| `https://developer.android.com/reference/androidx/health/connect/client/testing/FakePermissionController` | A fake `https://developer.android.com/reference/androidx/health/connect/client/PermissionController` that enables full control of permissions in tests for a `https://developer.android.com/reference/androidx/health/connect/client/HealthConnectClient`. |

*** ** * ** ***

Interface for operations related to permissions.

## Summary

| ### Public methods |
|---|---|
| `default static final @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html>, @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html>>` | `https://developer.android.com/reference/androidx/health/connect/client/PermissionController#createRequestPermissionResultContract(kotlin.String)( @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html providerPackageName )` Creates an `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract` to request Health permissions. |
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/health/connect/client/PermissionController#getGrantedPermissions()()` Returns a set of all health permissions granted by the user to the calling app. |
| `abstract void` | `https://developer.android.com/reference/androidx/health/connect/client/PermissionController#revokeAllPermissions()()` Revokes all previously granted `https://developer.android.com/reference/androidx/health/connect/client/permission/HealthPermission` by the user to the calling app. |

## Public methods

### createRequestPermissionResultContract

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

```
default static final @NonNull ActivityResultContract<@NonNull Set<@NonNull String>, @NonNull Set<@NonNull String>> createRequestPermissionResultContract(
    @NonNull String providerPackageName
)
```

Creates an `https://developer.android.com/reference/androidx/activity/result/contract/ActivityResultContract` to request Health permissions.

```kotlin
import androidx.health.connect.client.PermissionController
import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.StepsRecord

val requestPermission =
    activity.registerForActivityResult(
        PermissionController.createRequestPermissionResultContract()
    ) { grantedPermissions: Set<String> ->
        if (
            grantedPermissions.contains(HealthPermission.getReadPermission(StepsRecord::class))
        ) {
            // Read or process steps related health records.
        } else {
            // user denied permission
        }
    }
requestPermission.launch(setOf(HealthPermission.getReadPermission(StepsRecord::class)))
```

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html providerPackageName` | Optional provider package name to request health permissions from. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/activity/ComponentActivity#registerForActivityResult(androidx.activity.result.contract.ActivityResultContract,androidx.activity.result.ActivityResultRegistry,androidx.activity.result.ActivityResultCallback)` |   |

### getGrantedPermissions

```
abstract @NonNull Set<@NonNull String> getGrantedPermissions()
```

Returns a set of all health permissions granted by the user to the calling app.

```kotlin
import androidx.health.connect.client.permission.HealthPermission
import androidx.health.connect.client.records.StepsRecord

val grantedPermissions = permissionController.getGrantedPermissions()

if (grantedPermissions.contains(HealthPermission.getReadPermission(StepsRecord::class))) {
    // Read or process steps related health records.
} else {
    // user denied permission
}
```

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/util/Set.html<@https://developer.android.com/reference/androidx/annotation/NonNull https://developer.android.com/reference/java/lang/String.html>` | set of granted permissions. |

| Throws |
|---|---|
| `https://developer.android.com/reference/android/os/RemoteException.html` | For any IPC transportation failures. |
| `https://developer.android.com/reference/java/io/IOException.html` | For any disk I/O issues. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | If service is not available. |

### revokeAllPermissions

Added in [1.1.0](https://developer.android.com/jetpack/androidx/releases/health-connect#1.1.0)

```
abstract void revokeAllPermissions()
```

Revokes all previously granted `https://developer.android.com/reference/androidx/health/connect/client/permission/HealthPermission` by the user to the calling app.

| Throws |
|---|---|
| `https://developer.android.com/reference/android/os/RemoteException.html` | For any IPC transportation failures. |
| `https://developer.android.com/reference/java/io/IOException.html` | For any disk I/O issues. |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` | If service is not available. |