android-location是指Android框架提供的位置API。
我的应用程序启用了后台位置,Play 商店拒绝了我的应用程序更新。怎么解决?
我正在flutter中构建一个食品配送应用程序,其中包含卖家端、用户端和司机端。 该应用程序包含实时跟踪功能,需要后台位置权限。但这
我想在我的应用程序中获取经度和纬度的值,我已经做到了,但问题是我得到带有值的负号。虽然值是正确的,但不知道为什么得到
我正在尝试获取天气应用程序的用户当前位置,但我获取了某些“美国”区域的位置。我已经尝试了多个教程,但未能获得正确的当前位置。 它
我们如何确定是否可以在Android 12中请求位置权限升级?
在 Android 12 中,如果应用通过 ACCESS_FINE_LOCATION 请求精细位置权限,用户可能会选择仅授予粗略位置权限。不幸的是,并非所有 API 都适用于粗略定位...
Android 14 - 从未询问或授予 ACCESS_FINE_LOCATION
我的Manifest.xml: 我的 Manifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus"/> <uses-feature android:name="android.hardware.location.gps" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application .... <service android:name=".service.LocationService" android:enabled="true" android:exported="false" android:foregroundServiceType="location" android:stopWithTask="true"/> </application> </manifest> 然后我在主活动中请求权限的代码如下: ActivityResultLauncher<String[]> permissionRequest = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), result -> { boolean hasAllPermissions = true; for (Boolean value : result.values()) { hasAllPermissions = hasAllPermissions && value; } if (hasAllPermissions){ startLocationService(); } else { needsPermissionsDialog.show(); } }); private void checkPermissions() { permissionRequest.launch(new String[]{ Manifest.permission.INTERNET, Manifest.permission.ACCESS_NETWORK_STATE, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.POST_NOTIFICATIONS, Manifest.permission.CAMERA, Manifest.permission.ACCESS_BACKGROUND_LOCATION, Manifest.permission.FOREGROUND_SERVICE, Manifest.permission.FOREGROUND_SERVICE_LOCATION }); } private void startLocationService(){ if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { if (locationService == null) { Intent locationServiceIntent = new Intent(MainActivity.this, LocationService.class); startForegroundService(locationServiceIntent); bindService(locationServiceIntent, locationServiceConnection, 0); } } else { Toast.makeText(this, "Missing location permission", Toast.LENGTH_SHORT).show(); } } 从应用程序登录屏幕(什么是简单的 PIN 码解锁屏幕)返回后调用 checkPermissions() 函数。 我还尝试将调用放入 onCreate() 和 onStart() 方法作为第一步,但没有什么区别。行为始终都是一样的。始终无法授予 FINE_LOCATION 权限 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == LOGIN_ACTIVITY_REQUEST) { if (resultCode == RESULT_OK) { checkPermissions(); ... 在较旧的 Android 上,它可以 100% 正常工作,没有任何问题,服务已启动,我可以绑定到它,并获取位置更新。 然而,在 Android 14 上,ActivityResultContracts.RequestMultiplePermissions() 结果具有 false 表示 ACCESS_FINE_LOCATION 权限。 当我在应用程序的(android)设置中关闭权限时,它会请求权限(参见图片),但它只为 ACCESS_BACKGROUND_LOCATION 授予权限,并且 ACCESS_FINE_LOCATION 结果仍然为 false。 如果我从清单中删除 ACCESS_BACKGROUND_LOCATION,应用程序 (android) 设置中的位置权限选项就会消失。如果将其从 permissionRequest.launch() 列表中删除,我不会收到任何允许位置访问的提示。 如果我在任何地方(列表或清单)添加/替换 FINE 为 ACCESS_COARSE_LOCATION 也没关系。结果它也总是错误的。 所有其他权限请求对话框都工作正常。 该问题在 2 个小米和 1 个 Pixel 设备上重复出现,因此它甚至不是特定于设备的。 附注我知道这是我在这个主题中的第三个问题,但这也是我的第三次实现,但仍然没有结果。 尝试按照谷歌建议的方式实施: 首次请求粗略和精细位置权限,一旦获得批准,则仅请求ACCESS_BACKGROUND_LOCATION。这只能通过导航到应用程序的权限设置来允许。 public static void requestPermissions(Activity activity) { // Request foreground permissions first String[] foregroundPermissions = new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }; ActivityCompat.requestPermissions(activity, foregroundPermissions, REQUEST_FOREGROUND_PERMISSIONS); } private static final int REQUEST_FOREGROUND_PERMISSIONS = 1; public static void onRequestPermissionsResult(Activity activity, int requestCode, int[] grantResults) { super.onRequestPermissionsResult(requestCode, requestCode, grantResults); if (requestCode == REQUEST_FOREGROUND_PERMISSIONS) { if (hasPermissions(activity, foregroundPermissions)) { // Permissions granted, check for Android version and request background permission if needed if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { String[] backgroundPermission = new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}; ActivityCompat.requestPermissions(activity, backgroundPermission, REQUEST_BACKGROUND_PERMISSION); } else { showBackgroundLocationControls(activity); } } else { Toast.makeText(activity, "Location permission denied", Toast.LENGTH_SHORT).show(); } } else if (requestCode == REQUEST_BACKGROUND_PERMISSION) { if (hasPermissions(activity, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION})) { // Implement your logic to show BackgroundLocationControls here } else { Toast.makeText(activity, "Background location permission denied", Toast.LENGTH_SHORT).show(); } } } private static boolean hasPermissions(Activity activity, String[] permissions) { for (String permission : permissions) { if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { return false; } } return true; } 请完整阅读这篇文章,并尝试以相同的方式和这个链接实现。 注意:Google Play 商店有一个关于设备位置的位置策略,限制后台位置访问需要其核心功能并满足相关策略要求的应用程序。 ACCESS_BACKGROUND_LOCATION弹出窗口: 归因于 - https://www.paget96projects.com/guides/android-app-background-location-permission-and-play-store#google_vignette 如果您仍然遇到任何问题,请参阅此包。 https://github.com/android/platform-samples/tree/main/samples/location/src/main/java/com/example/platform/location/permission
使用 Android 应用程序打开坐标时“仅一次”与“始终询问”
Android 中有打开坐标的 API 可以显示默认值吗?就像是: 使用此应用程序打开:“仅一次”与“始终”对话框,它将向您显示所有
我有一个服务工作线程每 10 分钟运行一次,每次运行时都需要获取当前的纬度和经度,我一直在使用以下代码: 私有变量 fusedLocationClient:
使用 locationManager 时已弃用 android Criteria
在我的andorid应用程序中,我正在获取用户的位置。但是当用户没有打开 GPS 或网络时,我试图获取最后的位置: if (!isGPS && !isNetwork) { 显示设置...
Android 应用程序中 Google 地图时间线和 getLastLocation() 之间的差异
我开发了一个Android应用程序,它每分钟调用getLastLocation()函数来记录坐标。 然而,我发现 Android Go 记录的坐标之间存在差异......
我使用 LocationManager.GPS_PROVIDER 作为提供程序名称添加了一个测试提供程序,如此处所述 https://mobiarch.wordpress.com/2012/07/17/testing-with-mock-location-data-in-android/ 在谷歌地图中...
在 Jetpack Compose 应用程序上,有没有办法使用 LocationServices.getFusedLocationProviderClient 查询一次位置值
我试图了解如何在使用 Jetpack Compose 开发的 Android 应用程序中使用位置服务。经过一些教程后,我遇到了;我编写了以下代码组件来解...
现在我有这样的位置更新设置: 私有常量值 LOCATION_MIN_TIME_INTERVAL = 200L private val locationRequest = LocationRequest().apply { 间隔 = LOCATION_MIN_TIME_INT...
Location.bearingTo 值与 SensorManager.getOrientation 不同
在我的代码中,我使用 location.bearingTo 检索目标位置的方位角。另外,我将手机指向该位置,因此 SensorManager.getOrientation 也会返回方位角。但是
ACTION_LOCATION_SOURCE_SETTINGS:无法解析或不是字段
我通过 Intent 调用 ACTION_LOCATION_SOURCE_SETTINGS。它显示无法解析或不是从外部导入项目时引起的字段。我现在应该怎么做 ? 意图视图Intent = ...
GnssClock 方法 getFullBiasNanos 在每次回调时返回一个递减的数字,而根据定义它应该增加
GnssClock类中的方法public long getFullBiasNanos()定义为: GPS内部硬件时钟(getTimeNanos())的区别 接收器和自 0000Z 以来的真实 GPS 时间,Ja...
我有一个项目,我需要将位置设置为印度。但在我的模拟器中我没有得到位置。 我需要获取印度的位置 当我从模拟器中获取谷歌地图时,我...
如何在 Android 中创建位置请求? “LocationRequest.create()”现已弃用
LocationRequest.create() “此方法已弃用。请改用 LocationRequest.Builder。”文档中说。但我不知道如何使用它。 位置请求 位置请求 = 位置R...
有什么方法可以清除已经从Android设备手动捕获的位置详细信息吗?
我正在开发一个Android应用程序,它处理使用GPS捕获位置坐标。 我还获取了最后已知的位置详细信息(通过 locationManager.getLastKnownLocation(LocationMa...
对于低于 23 的 API(API 21 和 22),位置不会返回任何内容
我的位置服务在 API >=23 上运行得很好,但对于 API 21 和 22 没有显示任何内容。这是我的位置方法(请注意,我使用的是片段): /*if (!Permissions) { //位置许可...
Location.getProvider 始终返回“fused”而不是 GPS 或网络
我正在使用融合位置API: 位置请求 = LocationRequest.create(); locationrequest.setInterval(间隔); locationrequest.setFastestInterval(间隔);