diff --git a/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivity.kt b/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivity.kt new file mode 100644 index 000000000..674f8a42e --- /dev/null +++ b/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivity.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.snippets.location + +import android.Manifest +import android.os.Build +import androidx.activity.ComponentActivity +import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.RequiresApi + +// Assuming this function is inside a ComponentActivity or a subclass of it +class LocationPermissionsActivity : ComponentActivity() { + + // [START android_location_requestpermissions_kotlin] + @RequiresApi(Build.VERSION_CODES.N) + fun requestPermissions() { + val locationPermissionRequest = registerForActivityResult( + ActivityResultContracts.RequestMultiplePermissions() + ) { permissions -> + when { + permissions.getOrDefault(Manifest.permission.ACCESS_FINE_LOCATION, false) -> { + // Precise location access granted. + } + permissions.getOrDefault(Manifest.permission.ACCESS_COARSE_LOCATION, false) -> { + // Only approximate location access granted. + } + else -> { + // No location access granted. + } + } + } + + // Before you perform the actual permission request, check whether your app + // already has the permissions, and whether your app needs to show a permission + // rationale dialog. For more details, see Request permissions: + // https://developer.android.com/training/permissions/requesting#request-permission + locationPermissionRequest.launch( + arrayOf( + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + ) + ) + } + // [END android_location_requestpermissions_kotlin] +} diff --git a/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivityJava.java b/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivityJava.java new file mode 100644 index 000000000..8d20ad5d3 --- /dev/null +++ b/misc/src/main/java/com/example/snippets/location/LocationPermissionsActivityJava.java @@ -0,0 +1,51 @@ +package com.example.snippets.location; + +import android.Manifest; +import android.os.Build; +import android.os.Bundle; +import androidx.activity.ComponentActivity; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import java.util.Map; + +public class LocationPermissionsActivityJava extends ComponentActivity { + + // [START android_location_requestpermissions_java] + private void requestPermissions() { + + ActivityResultLauncher locationPermissionRequest = + registerForActivityResult(new ActivityResultContracts + .RequestMultiplePermissions(), result -> { + + Boolean fineLocationGranted = null; + Boolean coarseLocationGranted = null; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + fineLocationGranted = result.getOrDefault( + Manifest.permission.ACCESS_FINE_LOCATION, false); + coarseLocationGranted = result.getOrDefault( + Manifest.permission.ACCESS_COARSE_LOCATION,false); + } + + if (fineLocationGranted != null && fineLocationGranted) { + // Precise location access granted. + } else if (coarseLocationGranted != null && coarseLocationGranted) { + // Only approximate location access granted. + } else { + // No location access granted. + } + } + ); + + // ... + + // Before you perform the actual permission request, check whether your app + // already has the permissions, and whether your app needs to show a permission + // rationale dialog. For more details, see Request permissions. + locationPermissionRequest.launch(new String[] { + Manifest.permission.ACCESS_FINE_LOCATION, + Manifest.permission.ACCESS_COARSE_LOCATION + }); + } + // [END android_location_requestpermissions_java] +} \ No newline at end of file