我给出了纬度和经度的坐标,我想用那些制作一个位置对象.没有一个构造函数需要双倍来创建一个位置,所以我尝试这样:
Location l = null;
l.setLatitude(lat);
l.setLongitude(lon);
Run Code Online (Sandbox Code Playgroud)
但它崩溃了.任何不同的想法?
我目前用的是CursorAdaptera Loader.加载的数据Loader包含一个位置.我想从最近到最远的地方订购我的物品.我已经计算了显示它的距离,我现在需要找到一种动态排序数据的方法.
我可能CursorLoader每次修改数据时都会修改排序,但是一次又一次地执行相同的SQL查询只是为了改变顺序看起来对我来说太过分了......
有没有办法动态排序数据CursorAdapter?
sorting android android-location android-listview android-cursoradapter
如何提示用户打开位置?
应用程序应该使用用户的当前位置过滤位置列表.如果用户关闭了位置服务,应用程序应提示用户要求打开位置.
例如Trip Advisor应用程序执行此操作:
(不确定我是否可以在这里发布其他应用程序截图,但如果我不应该这样做,请说出来.并为全尺寸图片道歉,试图让它们变小,但是不喜欢它......)
在第一张图片中,您可以看到我已关闭位置服务.打开Trip Advisor应用程序,然后点击" 立刻接近我"选项,我会看到第二张图片,我被要求打开位置服务.点击按钮后,会出现一个对话框,以便我可以允许或禁止打开位置服务.如果点击" 确定",则会在设备上启用 " 位置"服务,然后应用程序会使用该服务.
我怎样才能做到这一点?
android android-location xamarin.android xamarin android-permissions
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) 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) 我想使用最新的融合位置提供商客户端在"后台服务"上获取位置更新.我不想使用所有正在使用的位置监听器和Google API客户端.我还需要使用谷歌播放服务提供的位置设置Api来检查位置设置是否禁用或启用"后台服务".请帮助.
android android-location google-play-services fusedlocationproviderapi google-location-services
我刚刚更新了我的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服务已重新启动,并且在重新启动服务后,没有活动的融合位置提供程序客户端请求了位置.为避免这种情况,您可以创建一个新客户端并自行请求位置更新.有关更多信息,请参阅接收位置更新.
但它没有说明如何处理这个问题,我该怎么办?
甚至有可能吗?我希望能够创建一个侦听器,该侦听器将收到有关位置权限更改的通知(无论应用程序是否触发它们)。据我所知,有获取当前权限状态的方法和请求权限的方法,但没有任何方法可以简单地允许应用程序监听更改。
例如,在 iOS 中,我们可以在 a 上设置一个委托,CLLocationManager然后通过locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus)在授权状态的任何更改上调用该委托。有谁知道 Android 中的任何等价物(最好与 API >= 17 兼容)?
为了使用地理围栏 API,用户必须向应用程序提供ACCESS_FINE_LOCATION. 这个位置被认为是危险的,可以随时撤销;一旦此权限被撤销,应用程序将无法请求地理围栏更新。
ACCESS_BACKGROUND_LOCATION这张图片中的权限如何?我们确信这种许可也是危险的,并且可以随时撤销。是不是说如果我们要在IntentService每次geofence变化发生时注册一些被调用的,还要确保用户已经提供了ACCESS_BACKGROUND_LOCATION权限?还是仅当我们尝试在自己的后台 Service/BroadcastReceiver 中获取当前位置时才需要使用此权限?
我问这个问题的原因是文档在这一点上似乎有点含糊:描述Q Developer Preview的文档提到地理围栏是后台位置检索的用例之一,而地理围栏API 页面确实如此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)
如果可能,我需要唯一的权限选项是“始终允许”。检查和设置权限时如何设置?
android ×10
android-location ×10
java ×2
android-10.0 ×1
android-gps ×1
kotlin ×1
sorting ×1
xamarin ×1