如果禁用定位服务,Android APP如何授予定位权限

问题描述 投票:0回答:1

我是开发 Android 应用程序的新手。我的目标是为我创建的自定义设备创建一个 BLE 应用程序。为了创建 BLE 应用程序,我必须首先学习如何启用位置服务,因为 BLE 需要启用它。

我已阅读并遵循以下说明: https://developer.android.com/training/location/permissionshttps://developer.android.com/training/permissions/requesting#java

我如何准备我的项目:

  1. 创建全新的 Java 项目 Minimum SDK (API 25:Android 7.1.1 (Nougat)

  2. 在AndroidManifest中添加权限

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
  1. 按照 (https://developer.android.com/training/permissions/requesting#allow-system-manage-request-code) 中的说明在 build.gradle (Module:app) 中添加库
   implementation "androidx.fragment:fragment:1.5.6"
   implementation "androidx.activity:activity:1.7.0"
  1. 复制了https://developer.android.com/training/permissions/requesting#java中提供的关于如何请求和处理对我的项目的请求响应的示例代码。

Full MainActivity.java代码:

package com.example.location_test_v2;

import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.content.ContextCompat;


import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (ContextCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            Log.e("INFO", "PERMISSION ALREADY GRANTED: ");
        }

        else {
            Log.e("INFO", "PERMISSION IS NOT GRANTED: ");
            locationPermissionRequest.launch(new String[] {
                    android.Manifest.permission.ACCESS_FINE_LOCATION,
                    android.Manifest.permission.ACCESS_COARSE_LOCATION
            });
        }

    }
    
    private ActivityResultLauncher<String[]> locationPermissionRequest =
            registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> {
                        Boolean fineLocationGranted = result.getOrDefault(android.Manifest.permission.ACCESS_FINE_LOCATION, false);
                        Boolean coarseLocationGranted = result.getOrDefault(android.Manifest.permission.ACCESS_COARSE_LOCATION,false);
                        if (fineLocationGranted != null && fineLocationGranted) {
                            Log.e("INFO", "PRECISE LOCATION GRANTED" );
                        } 
                        else if (coarseLocationGranted != null && coarseLocationGranted) {
                            Log.e("INFO", "APPROXIMATAE LOCATION GRANTED" );
                        } 
                        else {
                            Log.e("INFO", "NO LOCATION GRANTED" );
                        }
                    }
            );
    

}

我已经通过 WiFi 将我的物理设备与 android studio 配对,并在我的 Samsung Flip 4 上模拟应用程序。

想象一个场景,我之前没有在我的手机上安装这个应用程序(假设它是第一次下载),显然这个应用程序还没有位置权限。第一次打开应用程序时,会提示我启用位置共享,如下图所示:

选择精确或大概的位置后,一切似乎都很好。我可以转到我的设置->位置->应用程序权限->Location_test_v2(我的应用程序名称),我可以看到位置权限已授予该应用程序。

我的问题:

我唯一担心的是,如果我手机上的定位服务已关闭,如何才能向该应用程序授予定位权限。为什么我启用或禁用定位服务无关紧要?

java android android-studio location
1个回答
0
投票

为什么我启用或禁用定位服务都没有关系?

位置服务是从 GPS 等向

LocationManager
提供数据的。

但是,位置 权限 不仅涵盖了这一点,还涵盖了可用于确定设备位置的其他技术,例如扫描 WiFi 接入点,或者让您想起您的情况,检测 BLE 信标。

© www.soinside.com 2019 - 2024. All rights reserved.