我是开发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(我的应用程序名称),我可以看到位置权限被赋予了应用程序。
我的问题:
我唯一关心的是,如果我的手机上的定位服务关闭,如何才能将定位权限授予应用程序。为什么我启用或禁用定位服务并不重要?
1条答案
按热度按时间5vf7fwbs1#
为什么我启用或禁用定位服务并不重要?
位置服务是从GPS等向
LocationManager
提供数据的服务。然而,位置 * 权限 * 不仅涵盖了这些,还涵盖了可用于确定设备位置的其他技术,例如扫描WiFi接入点,或者让人联想到您的情况,检测BLE信标。