android 安卓APP禁用位置服务如何给予位置权限

lsmepo6l  于 2023-04-18  发布在  Android
关注(0)|答案(1)|浏览(178)

我是开发Android应用程序的新手。我的目标是为我创建的自定义设备创建BLE应用程序。为了创建BLE应用程序,我必须首先学习如何启用位置服务,因为BLE需要启用此功能。
我已阅读并遵循以下说明:https://developer.android.com/training/location/permissions和https://developer.android.com/training/permissions/requesting#java

我如何准备我的项目:

1.创建全新的Java项目Minimum SDK(API 25:Android 7.1.1(Nougat)
1.在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(模块:app)中添加库

implementation "androidx.fragment:fragment:1.5.6"
   implementation "androidx.activity:activity:1.7.0"

1.复制了www.example.com中提供的https://developer.android.com/training/permissions/requesting#java关于如何请求和处理我的项目的请求响应的示例代码。

www.example.comMainActivity.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配对,并在我的三星Flip 4上模拟应用程序。
想象一个场景,我以前没有在我的手机上安装这个应用程序(假设它是第一次下载),显然位置权限还没有给这个应用程序。当应用程序第一次打开时,我被提示启用位置共享,如下图所示:

在选择了精确或近似的位置后,一切似乎都很好。我可以进入我的设置-〉位置-〉应用程序权限-〉Location_test_v2(我的应用程序名称),我可以看到位置权限被赋予了应用程序。

我的问题:

我唯一关心的是,如果我的手机上的定位服务关闭,如何才能将定位权限授予应用程序。为什么我启用或禁用定位服务并不重要?

5vf7fwbs

5vf7fwbs1#

为什么我启用或禁用定位服务并不重要?
位置服务是从GPS等向LocationManager提供数据的服务。
然而,位置 * 权限 * 不仅涵盖了这些,还涵盖了可用于确定设备位置的其他技术,例如扫描WiFi接入点,或者让人联想到您的情况,检测BLE信标。

相关问题