标签: android-location

如何使用Wifi或GSM或GPS获取粗略位置,以哪个可用?

我的应用程序启动时只需要一个粗略的位置服务.

详细地说,我需要应用程序的粗略位置,以便为用户提供附近的商店信息.

该位置不需要不断更新.此外,在这种情况下,粗略定位就足够了.

我希望应用程序自动选择GSM,wifi或GPS,无论哪个可用.

定位服务也应该是一次性的,以节省电话能量.

我该怎么办?

我曾尝试单独使用GPS.

我的问题是我不知道如何停止GPS的持续刷新位置功能.我不知道如何让手机从三种方法中选择一种.

非常感谢一些示例代码或想法.

android android-location android-wifi

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

GeoCoder服务不可用

GeoCoder服务不可用

我正在用它GeoCoder来获得一个AddressLocation.不幸的是,该方法引发了一场IOException saying: "Service not Available".

这个StackOverFlow线程解释了发生了什么,因为我彻底测试了它(用户权限,构建版本,重启,GeoCoding API限制等).

你可以找到的Google Play-Services(或LocationService):Android设置 - >(管理)应用程序 - >运行进程,已崩溃或停止.它重新启动,但忘记将GeoCoderService绑定到NetworkLocator.

此错误的"解决方案"是重新启动Android手机,因为在重新启动时,GeoCoderService绑定到NetworkLocater.我当然不认为这是一个解决方案.

我的问题是,LocationService如何崩溃或首先停止?

我所做的是手动强制停止Google Play服务,一些设备重新启动了LocationService,但有些设备没有.

不工作(没有重启LocationService)

  • 4.0.3三星Galaxy Note(GT-N7000)
  • 4.0.4三星平板电脑GT-P7100
  • 4.1.2 nexus S.
  • 4.1.2三星Galaxy S III(GT-I9300)

工作(确实重启了LocationService)

  • 2.3.5 HTC Wildfired S.
  • 4.0.3 Acer A500
  • 4.1.1三星Galaxy Note II(GT-7100)
  • 4.1.2三星Galaxy S II(GT-I9105P)
  • 4.2.2三星平板电脑GT-P7500
  • 4.2.2 Nexus 7
  • 4.3 Galaxy Nexus

有人知道Google Play服务(LocationService)在运行一段时间后崩溃或停止的原因是什么?

我已将此问题上报给b.Android.com,并亲自联系了Android开发人员.

我已经看到我的问题已经在其他线程中讨论过,但没有得出任何结论:

android geocoding android-location google-geocoder google-play-services

14
推荐指数
1
解决办法
7922
查看次数

Android LocationRequest:请求到期时获取回调

我想知道如何捕捉事件或什么时候我的LocationReqest过期,继承人代码,然后我称之为

mLocationRequest = LocationRequest.create();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    mLocationRequest.setExpirationDuration(500);
    mLocationRequest.setNumUpdates(1); 
    mLocationClient.requestLocationUpdates(mLocationRequest, this);
Run Code Online (Sandbox Code Playgroud)

现在我需要知道我的LocationRequest是休息,ty求助:)

编辑

我以为我能抓住它

public void onLocationChanged(Location location) {
//something is here
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(

EDIT2

我部分解决了它通过添加处理程序检查N + 500ms如果位置设置,我仍然想知道我是否可以没有处理程序

android android-location

14
推荐指数
1
解决办法
2601
查看次数

isProviderEnabled(LocationManager.NETWORK_PROVIDER)返回false

我使用NETWORK_PROVIDER来获得latitudelongitude的地方.

我已经检查了"位置和安全性"中的设置并启用了"使用无线网络".但"isProviderEnabled(LocationManager.NETWORK_PROVIDER)"总是回来false.

谁能帮我?先感谢您!

这是我的代码:

LocationManager locManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean isEnableGPS=locManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isEnableNTW=locManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Log.d(TAG, isEnableGPS+", "+isEnableNTW);
Run Code Online (Sandbox Code Playgroud)

AndroidMainfest.xml中的权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)

android locationmanager android-location

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

持续报告用户位置的最佳实践

我正在设计一个应用程序,其中服务器端的应用程序需要不断了解用户位置.我正在考虑创建一个在后台运行的Android服务,并不断查询用户位置并将结果发送到后端服务器中的应用程序.但是,我想知道这是否是节省电池方面的最佳方法.例如,在iOS中,有一种称为"重大变化"的东西用于此目的,Android有类似的东西.

android android-service android-location

12
推荐指数
1
解决办法
8623
查看次数

如何扩展实现Parcelable接口的android类?

首先,我检查了这个答案.

我想要做的是扩展Location类调用它LocationPlus有一些成员变量.我想要实现的功能是将LocationPlus类的对象从一个活动传递到另一个活动.

这是我的 CREATOR

public static final Parcelable.Creator<LocationPlus> CREATOR = new Parcelable.Creator<LocationPlus>() {
    @Override 
    public LocationPlus createFromParcel(Parcel source) {
        return new LocationPlus(source);
    }
    @Override 
    public LocationPlus[] newArray(int size) {
        return new LocationPlus[size];
    }
};
Run Code Online (Sandbox Code Playgroud)

我面临的问题是这个错误

Implicit super constructor Location() is undefined. Must explicitly invoke another constructor
Run Code Online (Sandbox Code Playgroud)

在尝试编写构造函数时

public LocationPlus(Parcel in) {
Run Code Online (Sandbox Code Playgroud)

有评论的人要求我发布LocationPlus类,所以在这里

public class LocationPlus extends Location{

    private int mBattery = -1;

    public LocationPlus(String locationName) {
        super(locationName);
    }

    public LocationPlus(Location location) { …
Run Code Online (Sandbox Code Playgroud)

inheritance android android-location

12
推荐指数
3
解决办法
1万
查看次数

哪个是更高的准确度标准:ACCURACY_HIGH还是ACCURACY_FINE?

Criteria类中,有两个常量,ACCURACY_HIGHACCURACY_FINE,这是显然是用来要求LocationManager返回较高精度的定位更新.以下是文档中关于每个常量的说明:

public static final int ACCURACY_FINE (在API级别1中添加)

  A constant indicating a finer location accuracy requirement
  Constant Value: 1 (0x00000001)
Run Code Online (Sandbox Code Playgroud)

public static final int ACCURACY_HIGH (在API级别9中添加)

  a constant indicating a high accuracy requirement - may be used for horizontal, altitude, speed or bearing accuracy. For horizontal and vertical position this corresponds roughly to an accuracy of less than 100 meters.
  Constant Value: 3 (0x00000003) 
Run Code Online (Sandbox Code Playgroud)

有谁知道这两个常数中的哪一个提供(即要求)最高准确度?

gps android android-location

12
推荐指数
2
解决办法
8135
查看次数

使用GoogleApiClient + LocationServices不更新

我只是想做一个简单的"教程"应用程序来获取我的手机的位置(以便在以后的其他应用程序中学习如何使用它),但我只是没有到达任何地方.

我做了什么

  1. Android Developer的教程:首先,我按照Android开发者网站(developer.android.com/training/location/receive-location-updates.html)中的教程进行操作.

    就像那里所示,我使用了Location,LocationClient和LocationRequest,在onCreate中初始化它们(并设置它们).LocationClient在onStart和onStop上连接和断开连接.

    我在连接后请求位置更新(在onConnected中).我在进行此调用之前验证了GooglePlayServices是否可用,而且我仍然没有在"onLocationChanged"中获得任何更新.

  2. GoogleApiClient:我注意到不推荐使用LocationClient,而首选的是LocationServices(developer.android.com/reference/com/google/android/gms/location/LocationClient.html).

    如下所示:https://developer.android.com/reference/com/google/android/gms/location/FusedLocationProviderApi.html,我使用GoogleApiClient并将其设置为LocationServices(也是/sf/answers/1750969531/).所以我把它全部设置为使用它,但我仍然没有得到任何关于位置的更新.

onLocationChanged如果有响应则应该打印.我还放了一个打印位置或"没有"的按钮.

备注

我检查了使用谷歌地图,看看我是否有一些东西,但它的工作正常.

项目

的build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.google.android.gms:play-services:5.0.77'
    compile "com.android.support:support-v4:20.0.+"
}
Run Code Online (Sandbox Code Playgroud)

表现

...
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
...
<meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
...
Run Code Online (Sandbox Code Playgroud)

public class MyActivity extends Activity  implements
        GoogleApiClient.ConnectionCallbacks,
        GoogleApiClient.OnConnectionFailedListener,
        LocationListener {

    private GoogleApiClient mLocationClient;
    private Location mCurrentLocation;
    LocationRequest mLocationRequest;

    ...
    /* Constant fields - request interval */
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        mLocationClient …
Run Code Online (Sandbox Code Playgroud)

android location android-location google-api-client google-play-services

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

无法启动服务 - 需要ACCESS_MOCK_LOCATION安全设置

我有一个例外

java.lang.RuntimeException: Unable to start service ...
java.lang.SecurityException: Requires ACCESS_MOCK_LOCATION secure setting
Run Code Online (Sandbox Code Playgroud)

但是我有Manifest文件:

<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

有什么不对?

android android-manifest android-location

11
推荐指数
1
解决办法
9733
查看次数

前台服务与 WorkManager 进行位置跟踪

假设我想构建一个应用程序,它定期请求当前位置(例如,每 10 分钟一次,这个数字应该是可配置的)并提交到服务器。

我知道对于这种情况通常建议使用 Foreground Service 和 WorkManager。然而哪个更适合呢?以下是我的想法和疑问。

  1. WorkManager - 主要用于可延迟的后台工作,其执行是有保证的。但我知道从 Android 8 (API 26) 开始引入了后台位置,并且限制位置每小时只能更新几次https://developer.android.com/about/versions/oreo/background-location-limits。因此,这可能不符合定期更新的要求。

  2. ForegroundService - 非常适合运行并需要让用户意识到的东西。出于隐私目的,建议这种情况(位置跟踪)使用。Google 还创建了一个示例应用程序来推广这种做法https://github.com/android/location-samples/tree/master/LocationUpdatesForegroundService

从上面的分析来看,似乎ForegroundService是这样的。但是我还发现它WorkManager具有内置支持,可ForegroundService通过androidx.work.impl.foreground.SystemForegroundService https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running#long-running-kotlin结合使用 Worker

这让我很困惑,不知道我应该使用什么,以及谷歌针对这个特定场景真正推荐的是什么。

有人有什么想法吗?

android android-location foreground-service android-architecture-components android-workmanager

11
推荐指数
1
解决办法
5610
查看次数