标签: android-location

从坐标获取位置

我给出了纬度和经度的坐标,我想用那些制作一个位置对象.没有一个构造函数需要双倍来创建一个位置,所以我尝试这样:

 Location l = null;
 l.setLatitude(lat);
 l.setLongitude(lon);
Run Code Online (Sandbox Code Playgroud)

但它崩溃了.任何不同的想法?

android android-location

7
推荐指数
1
解决办法
7868
查看次数

CursorAdapter动态排序

我目前用的是CursorAdaptera Loader.加载的数据Loader包含一个位置.我想从最近到最远的地方订购我的物品.我已经计算了显示它的距离,我现在需要找到一种动态排序数据的方法.

我可能CursorLoader每次修改数据时都会修改排序,但是一次又一次地执行相同的SQL查询只是为了改变顺序看起来对我来说太过分了......

有没有办法动态排序数据CursorAdapter

sorting android android-location android-listview android-cursoradapter

7
推荐指数
1
解决办法
1241
查看次数

要求用户打开位置

如何提示用户打开位置


应用程序应该使用用户的当前位置过滤位置列表.如果用户关闭了位置服务,应用程序应提示用户要求打开位置.

例如Trip Advisor应用程序执行此操作:

在此输入图像描述在此输入图像描述在此输入图像描述在此输入图像描述

(不确定我是否可以在这里发布其他应用程序截图,但如果我不应该这样做,请说出来.并为全尺寸图片道歉,试图让它们变小,但是不喜欢它......)

在第一张图片中,您可以看到我已关闭位置服务.打开Trip Advisor应用程序,然后点击" 立刻接近我"选项,我会看到第二张图片,我被要求打开位置服务.点击按钮后,会出现一个对话框,以便我可以允许或禁止打开位置服务.如果点击" 确定",则会在设备上启用 " 位置"服务,然后应用程序会使用该服务.

我怎样才能做到这一点?

android android-location xamarin.android xamarin android-permissions

7
推荐指数
2
解决办法
2万
查看次数

如何在启动应用程序时要求用户启用GPS?

private void turnGPSOn(){
String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

if(!provider.contains("gps")){ //if gps is disabled
    final Intent poke = new Intent();
    poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
    poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
    poke.setData(Uri.parse("3")); 
    sendBroadcast(poke);
}
}
Run Code Online (Sandbox Code Playgroud)

看到Logcat

04/20 17:35:26: Launching app
$ adb push F:\AndroidProject\Picker\app\build\outputs\apk\app-debug.apk /data/local/tmp/picker.novasyslabs.com.picker
$ adb shell pm install -r "/data/local/tmp/picker.novasyslabs.com.picker"
    pkg: /data/local/tmp/picker.novasyslabs.com.picker
Success


$ adb shell am start -n "picker.novasyslabs.com.picker/picker.novasyslabs.com.picker.SlashScreen" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 22502 on device sony-d2302-ZH80065A89
W/ResourceType: Found multiple library tables, ignoring...
W/ResourceType: Found multiple library tables, ignoring...
W/ResourceType: Found multiple library …
Run Code Online (Sandbox Code Playgroud)

android android-location android-gps

7
推荐指数
4
解决办法
1万
查看次数

Geocoder返回零长度的地址

Geocoder工作正常,直到今天.它开始返回0长度的String.注意:这不是Geocoder线程的重复,我在启动线程之前使用了intent服务和AsyncTask来获取它(并且AsyncTask方法在8个月内工作正常),使用FusedLocationProviderClient从Google 检查此代码和新代码(这是正常的)代码)它还返回零长度的字符串.官方Android页面中的此链接显示了如何使用意向服务获取它.

我在Android 5.1上获得完整地址,但在Android 7.1上,它返回长度为零的地址.

代码我以前使用和工作到今天.

private void getAddressFromCoordinates() {

    new AsyncTask<Void, String, Void>() {

        @Override
        protected Void doInBackground(Void... params) {

            try {
                addresses.clear();
                addresses.addAll(geocoder.getFromLocation(mCurrentLocation.getLatitude(),
                        mCurrentLocation.getLongitude(), 1));


            } catch (IOException e) {
                e.printStackTrace();
                showToastAsync(getString(R.string.activity_loc_no_location_info));
            } catch (IllegalArgumentException illegalArgumentException) {
                // Catch invalid latitude or longitude values.
                showToastAsync("Invalid latitude or longitude values");
            }

            // Handle case where no address was found.
            if (addresses == null || addresses.size() == 0) {
                showToastAsync(getString(R.string.activity_loc_no_address_is_found));
            } else {
                Address …
Run Code Online (Sandbox Code Playgroud)

android android-location

7
推荐指数
1
解决办法
1156
查看次数

位置更新使用Google Play服务和FusedLocationProviderClient

我想使用最新的融合位置提供商客户端在"后台服务"上获取位置更新.我不想使用所有正在使用的位置监听器和Google API客户端.我还需要使用谷歌播放服务提供的位置设置Api来检查位置设置是否禁用或启用"后台服务".请帮助.

android android-location google-play-services fusedlocationproviderapi google-location-services

7
推荐指数
1
解决办法
3988
查看次数

fusedLocationProviderClient.lastLocation.addOnSuccessListener始终为null

我刚刚更新了我的Location API以使用FusedLocationProviderClient,但是我遇到了这个问题,当我关闭并在GPS上时,我总是得到null位置:

val fusedLocationProviderClient =
                        LocationServices.getFusedLocationProviderClient(callingActivity)
            fusedLocationProviderClient.flushLocations()
            getLocationRequest()

            checkLocationSettings(callingActivity, turnOnGpsRequestCode, callback) {
                // Location settings successful
                fusedLocationProviderClient.lastLocation
                        .addOnSuccessListener(callingActivity) {
                            location ->
                            // Here location is always null
callback.onCallback(MenumyRadar.RadarStatus.SUCCESS, location)
                        }
                        .addOnFailureListener {
                            callback.onCallback(MenumyRadar.RadarStatus.ERROR_UNKNOWN, null)
                        }
            }
Run Code Online (Sandbox Code Playgroud)

直到我打开另一个使用位置的应用程序,如谷歌地图或优步,它才能工作.

我有一些线索感谢这个答案 FusedLocationApi.getLastLocation总是为null

谷歌的解释:

fusedLocationClient.lastLocation .addOnSuccessListener {location:Location? - > //找到最后一个位置.在某些罕见情况下,这可能为空.}

getLastLocation()方法返回一个Task,您可以使用该Task获取具有地理位置的纬度和经度坐标的Location对象.在以下情况下,location对象可能为null:

设备设置中的位置已关闭.即使先前检索过最后一个位置,结果也可能为null,因为禁用位置也会清除缓存.设备从未记录其位置,这可能是新设备或已恢复出厂设置的设备.设备上的Google Play服务已重新启动,并且在重新启动服务后,没有活动的融合位置提供程序客户端请求了位置.为避免这种情况,您可以创建一个新客户端并自行请求位置更新.有关更多信息,请参阅接收位置更新.

但它没有说明如何处理这个问题,我该怎么办?

android android-location

7
推荐指数
1
解决办法
3919
查看次数

我们如何监听 Android 中的位置权限变化(不触发权限请求)?

甚至有可能吗?我希望能够创建一个侦听器,该侦听器将收到有关位置权限更改的通知(无论应用程序是否触发它们)。据我所知,有获取当前权限状态的方法和请求权限的方法,但没有任何方法可以简单地允许应用程序监听更改。

例如,在 iOS 中,我们可以在 a 上设置一个委托,CLLocationManager然后通过locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)在授权状态的任何更改上调用该委托。有谁知道 Android 中的任何等价物(最好与 API >= 17 兼容)?

java android android-location kotlin android-fusedlocation

7
推荐指数
1
解决办法
3838
查看次数

Android Q 中引入的 ACCESS_BACKGROUND_LOCATION 对地理围栏 API 有何影响?

为了使用地理围栏 API,用户必须向应用程序提供ACCESS_FINE_LOCATION. 这个位置被认为是危险的,可以随时撤销;一旦此权限被撤销,应用程序将无法请求地理围栏更新。

ACCESS_BACKGROUND_LOCATION这张图片中的权限如何?我们确信这种​​许可也是危险的,并且可以随时撤销。是不是说如果我们要在IntentService每次geofence变化发生时注册一些被调用的,还要确保用户已经提供了ACCESS_BACKGROUND_LOCATION权限?还是当我们尝试在自己的后台 Service/BroadcastReceiver 中获取当前位置时才需要使用此权限?

我问这个问题的原因是文档在这一点上似乎有点含糊:描述Q Developer Preview的文档提到地理围栏是后台位置检索的用例之一,而地理围栏API 页面确实如此ACCESS_BACKGROUND_LOCATION在它的要求中没有提到。

android android-location android-geofence android-10.0

7
推荐指数
2
解决办法
8671
查看次数

Android 10 (Q) ACCESS_BACKGROUND_LOCATION 权限

我需要用户检查并设置对 ACCESS_BACKGROUND_LOCATION(“始终允许”)的权限,而没有“仅在使用应用程序时允许”选项。即使应用程序被最小化,我的 GPS 跟踪应用程序也需要继续访问位置。

我已经有权限为 Android 9 的 ACCESS_FINE_LOCATION 工作。

AndroidManifest.xml--------------------------------------------------->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
TrackingActivity.java (need to include ACCESS_BACKGROUND_LOCATION)---->

private void permissionCheck1() {
        int permissionCheck1 = ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION);
        if (permissionCheck1 != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
        } else {
            grantedSetupGPSandMap();
        }
}
Run Code Online (Sandbox Code Playgroud)

如果可能,我需要唯一的权限选项是“始终允许”。检查和设置权限时如何设置?

java android android-location

7
推荐指数
1
解决办法
8948
查看次数