2012-12-26 27 views
-2

我想启动一个将在后台运行的服务,并且每隔30到45秒显示一次经纬度。 下面是我的代码,我使用的:如何在服务中获取Android中的位置

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已停止。

+1

LogCat(堆栈跟踪)说什么? –

+0

post stacktrace(-1,用于抱怨没有堆栈跟踪的崩溃) – njzk2

+0

使用https://github.com/commonsguy/cwac-locpoll –

回答

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/

基于在概念,并且适于从, 机器人一些代码-protips-location by Reto Meier,来自他的博文A Deep Dive 进入位置。

+0

我已添加权限..但我无法得到任何吐司给我的位置 – Zohaib

1

您需要先订阅供应商。为此,请在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); 
    } 
相关问题