标签: locationmanager

LocationManager的Android检查权限

当我点击活动布局中的按钮时,我正在尝试显示GPS坐标.以下是单击按钮时调用的方法:

public void getLocation(View view) {
    TextView tv = (TextView) findViewById(R.id.gps_coord_view);
    LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    tv.setText("Latitude: " + loc.getLatitude() + "\nLongitude: " + loc.getLongitude());
}
Run Code Online (Sandbox Code Playgroud)

我收到的错误是

呼叫需要用户可能拒绝的许可.代码应明确检查是否有权限.

我已经在我的授权中授予了这些权限AndroidManifest.当我在调用之前添加以下内容时,错误被处理并且应用程序编译lm.getLastKnownLocation:

if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
        && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    return;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我按下点击时调用getLocation的按钮时,应用程序崩溃了.到底是怎么回事?是否有更好/更简单的方法来获取设备的GPS坐标?

android locationmanager

90
推荐指数
4
解决办法
23万
查看次数

LocationRequest setInterval(long millis)和LocationRequest setFastestInterval(long millis)之间的区别

我在android中每隔5分钟编写一次自己的后台位置更新.我想知道setInterval和setFastestInterval之间的区别

当我将setInterval设置为5分钟并将setFastestInterval设置为2分钟.每2分钟调用一次位置更新.

我想知道区别.我无法理解这个https://developer.android.com/reference/com/google/android/gms/location/LocationRequest.html的开发者页面中究竟写了什么.

另外:只有当第一次更新的距离超过20米并且第二次更新时,是否有内置功能来检查位置更新?

谢谢!

gps android location locationmanager

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

永远不会调用OnLocationChanged回调

我试图让用户使用当前位置LocationManager.我做了很多研究,似乎找不到任何有同样问题的人.该OnLocationChanged回调似乎永远不会被调用.下面是我的各种代码和logcat.

protected LocationListener locationListener;
protected LocationManager locationManager;
protected Context context;
Run Code Online (Sandbox Code Playgroud)

我的OnCreate()方法

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v(TAG, "IN ON CREATE");

    this.context = getActivity();

    registerLocationUpdates();
}
Run Code Online (Sandbox Code Playgroud)

我的registerLocationUpdates方法

void registerLocationUpdates() {
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_LOW);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);

    locationManager = (LocationManager)getActivity().getSystemService(LOCATION_SERVICE);

    provider = locationManager.getBestProvider(criteria, true);

    // Cant get a hold of provider
    if (provider == null) {
        Log.v(TAG, "Provider is null");
        showNoProvider();
        return;
    } else {
        Log.v(TAG, "Provider: " + …
Run Code Online (Sandbox Code Playgroud)

android geolocation locationmanager

63
推荐指数
4
解决办法
8万
查看次数

NETWORK_PROVIDER未提供更新的位置

LocationManager locationManager = (LocationManager)getApp().getSystemService(Context.LOCATION_SERVICE); //getApp() returns my Application object
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER , 1, 1, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1, 1, this);
Run Code Online (Sandbox Code Playgroud)

那是我用来听的代码.启用GPS后,一切正常.但是,如果我禁用GPS并依赖网络位置,它会给我带来陈旧的结果 - 在这种情况下,从两天前开始.我无法让它更新.调用getLastKnownLocation返回相同的陈旧结果.

谷歌地图更新很好,所以我知道这不是硬件/系统配置问题.

我用Google搜索过,发现一些有类似问题的人,但没有答案.我已经尝试将我的项目定位到API级别8(2.2)以及15(4.0.3).结果相同.我的手机正在运行ICS.

我还试图删除对GPS_PROVIDER的请求,以及在getAllProviders()中包含对所有内容的请求.同样的交易.

知道为什么NETWORK_PROVIDER没有更新?任何帮助将不胜感激.

(PS不,我通常不会使用"1,1"作为我的时间/距离参数;我只是在调试时更改了它.)

编辑:我忘了提到是的,isProviderEnabled()返回true.

android geolocation locationmanager

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

NETWORK_PROVIDER的LocationListener已启用,但永远不会调用onLocationChanged

我正在开发一个应用程序,在服务中的6分钟和6分钟内整天获得手机的位置,它工作正常,但有时OnLocationChanged网络提供者监听器的方法停止被调用,我不知道为什么.

它由于某种原因停止被调用,但是当我手动启用或禁用提供程序onProviderEnabled并且onProviderDisabled被调用时,提供程序已启用且Lister正在工作.

它恰好发生NETWORK_PROVIDER,GPS_PROVIDER效果很好.

监听器:

LocationListener locationListenerGPS = new LocationListener() {
        // @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // TODO locationListenerGPS onStatusChanged
            Log.d(TAG, "Provedor trocado");
        }

        // @Override
        public void onProviderEnabled(String provider) {
            Log.w(TAG, "PROVEDOR " + provider + " HABILITADO!");
        }

        // @Override
        public void onProviderDisabled(String provider) {
            Log.w(TAG, "PROVEDOR " + provider + " DESABILITADO!");
        }

        // @Override
        public void onLocationChanged(Location location) {

            longitudeGPS = …
Run Code Online (Sandbox Code Playgroud)

gps android geolocation locationmanager locationlistener

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

如何停止位置经理?

不知道为什么,但有时候LOCManager在关闭应用程序后仍然可以工作.

我在一个Activity中调用onCreate-Methode中的startGPS()(只有一个,我称之为StartActivity).

protected void startGPS(){    
 try {           
     lmanager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
     lmanager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this);
     lmanager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
 } catch(Exception e) {
     e.printStackTrace();
 }
}
Run Code Online (Sandbox Code Playgroud)

如果此活动将被销毁(因此,当应用程序将关闭时),我调用endGPS()

public void endGPS(){
 try {           
     lmanager.removeUpdates(this);
     lmanager=null;
 } catch(Exception e) {
  e.printStackTrace();
 }
}
Run Code Online (Sandbox Code Playgroud)

一些想法,一些建议,我做错了什么?!

gps android locationmanager

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

GPS Android - 只定位一次

有没有办法访问GPS一次,而不是有一个不断检查位置更新的looper?

在我的场景中,我感兴趣的是找到当前的坐标而不是与GPS卫星的连续连接.有没有人有任何想法如何做到这一点?提前致谢.

java gps android locationmanager

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

应用程序进入后台后每n分钟获取用户位置

我正在尝试实施这篇文章中给出的建议.

不幸的是,我不清楚这些步骤.我尝试实现这些建议,但是即使在我启动和停止locationServices之后,backgroundTimeRemaining仍然继续减少.这就是我开发它的方式:

- (void)applicationDidEnterBackground:(UIApplication *)application {

    UIApplication*    app = [UIApplication sharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }];

    // Start the long-running task and return immediately.
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        // Do the work associated with the task.
        self.timer = nil;
        [self initTimer];

    });
}
Run Code Online (Sandbox Code Playgroud)

initTimer:

- (void)initTimer {

    // Create the location manager if this object does not
    // already have one.
    if (nil == self.locationManager)
        self.locationManager = [[CLLocationManager alloc] init];

    self.locationManager.delegate = self;
    [self.locationManager …
Run Code Online (Sandbox Code Playgroud)

iphone background objective-c locationmanager ios

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

getSystemService()如何正常工作?

乍一看下面的代码中,mLocationManager对象应该在onCreate(...)完成后超出范围,并且预期的行为onLocationChanged是从未调用或调用几次,直到对象被垃圾回收.但是,返回的对象getSystemService似乎是单例,它存在于范围之外MainActivity(因此它是一个系统服务:)

在进行堆转储并使用Eclipse Memory Analyzer完成后,似乎ContextImpl保留了对LocationManager实例的引用.在内存转储中有两个对LocationManager对象的引用,而在代码中显然只有一个,这意味着在其他地方创建了另一个引用.

我的问题是:

在调用以下实现时,是否有人完整地描述了正在发生的事情:

public abstract Object getSystemService(String name);
Run Code Online (Sandbox Code Playgroud)

是一个懒惰创建的单例返回的对象,创建/保留引用的确切位置是什么?

package com.neusoft.bump.client.storage;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

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

        Log.v("TAG", "STARTED");
        LocationManager mLocationManager = (LocationManager) this
                .getSystemService(Context.LOCATION_SERVICE);

        LocationListener locationListener = new LocationListener() {

            public void onLocationChanged(Location location) {
                Log.v("TAG", "onLocationChanged");
                Log.v("TAG", "Latitude: " + location.getLatitude() …
Run Code Online (Sandbox Code Playgroud)

android locationmanager

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

onLocationChanged()从未调用过

我正在编写一个带来当前位置的代码,但它没有给我这个位置,因为它从不调用onLocationChanged().是否有任何方法可以找到该位置.

对于这种情况,mobileLocation将为0,因此执行将转到else块.

我的代码是

public class FindLocation {
private LocationManager locManager;
private LocationListener locListener;
private Location mobileLocation;
private String provider;

public FindLocation(Context ctx){
    locManager = (LocationManager) ctx.getSystemService(Context.LOCATION_SERVICE);
    locListener = new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status,
                Bundle extras) {
        }
        @Override
        public void onProviderEnabled(String provider) {
        }
        @Override
        public void onProviderDisabled(String provider) {
        }
        @Override
        public void onLocationChanged(Location location) {
            System.out.println("mobile location is in listener="+location);
            mobileLocation = location;
        }
    };
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locListener);              
    if (mobileLocation …
Run Code Online (Sandbox Code Playgroud)

gps android locationmanager

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