【问题标题】:How to get location in Android within a service如何在服务中获取 Android 中的位置
【发布时间】:2012-12-26 17:17:07
【问题描述】:

我想启动一个将在后台运行的服务,并每隔 30 到 45 秒显示一次纬度和经度。 以下是我正在使用的代码:

public class LocalService extends Service implements LocationListener {
    private final static String TAG = "LocalService";
    LocationManager lm;


    public LocalService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        subscribeToLocationUpdates();
    }

    public void onLocationChanged(Location loc) {
        Log.d(TAG, loc.toString());
        Toast.makeText(getApplicationContext(), loc.getLatitude() + " - " + loc.getLongitude(), Toast.LENGTH_LONG).show();
        Log.i("Location", loc.getLatitude() + " - " + loc.getLongitude());
    }

    public void onProviderEnabled(String s) {
    }

    public void onProviderDisabled(String s) {
    }

    public void onStatusChanged(String s, int i, Bundle b) {
    }

    public void subscribeToLocationUpdates() {
        this.lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        this.lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 30, 0, this);
    }
}

我这样调用我的服务:

startService(new Intent(TimerServiceActivity.this,
         LocalService.class));

这是我的服务清单代码:

<service android:name="LocalService" >

每当我运行此代码时,它都会给我一条错误消息,不幸的是,TimerService 已停止。

【问题讨论】:

  • LogCat(堆栈跟踪)说什么?
  • 发布堆栈跟踪(-1 用于抱怨没有堆栈跟踪的崩溃)
  • 请记住,这会耗尽电池电量。
  • @A--C ,njzk2 我没有收到任何错误,而是警告并且它没有停止。

标签: android service gps locationlistener


【解决方案1】:

您的清单中是否添加了权限?

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

我强烈推荐使用这个针对电池使用优化的库,而且使用起来相当简单:

http://code.google.com/p/little-fluffy-location-library/

基于中的概念,以及改编自的一些代码, Reto Meier 的 android-protips-location,来自他的博客文章 A Deep Dive 进入位置。

【讨论】:

  • 我已添加权限.. 但我无法获得任何给我位置的吐司
【解决方案2】:

您需要先订阅提供程序。为此,请在 onCreate() 方法的开头添加:

            locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    // Define the criteria how to select the locatioin provider -> use
    // default
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    provider = locationManager.getBestProvider(criteria, false);

    Location location = locationManager.getLastKnownLocation(provider);
    Log.v(TAG, "Init");
    // Initialize the location fields
    if (location != null) {
        System.out.println("Provider " + provider + " has been selected.");
        onLocationChanged(location);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-28
    • 2012-02-08
    • 2020-03-12
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2023-04-09
    相关资源
    最近更新 更多