2013-08-05 3 views
1

Это первый раз, когда я пользуюсь услугой, и это, безусловно, выглядит очень сложно от активности.Используйте сервис, чтобы получить GPS-местоположение, Android?

Итак, я пытаюсь получить местоположение пользователя после того, как он закрыл мое приложение с помощью этой службы.

Это мой класс обслуживания.

public class LocTrack extends Service { 


GPSTracker gp; 
@Override 
public void onCreate() 
{ gp = new GPSTracker(getApplicationContext()); 
    onLocationChanged(gp); 
    super.onCreate();   
} 
@Override 
public void onDestroy() { 
    // TODO Auto-generated method stub 
    super.onDestroy(); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 

    return Service.START_STICKY; 
} 


@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 

public void onLocationChanged(GPSTracker track) { 


    // Getting latitude 
    double latitude = track.getLatitude(); 

    // Getting longitude 
    double longitude = track.getLongitude(); 

    Geocoder geocoder = new Geocoder(LocTrack.this, Locale.getDefault()); 

    try 
    { 
     List<Address> addresses = geocoder.getFromLocation(latitude, longitude,1); 
     Log.e("Addresses","-->"+addresses); 

    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 

    } 

} 
} 

Пожалуйста, скажите мне, что я делаю с моей стороны. Если я использую код в классе активности, то я могу получить адрес в логарифме, но не когда я использую службу.

Это, как я зову обслуживание от деятельности

Intent intent = new Intent(MainActivity.this, LocTrack.class); 
      startService(intent); 
+0

У вас есть разрешение в манифесте –

+0

yes .....LocTrack - это имя моего класса сервиса – WISHY

+0

нет M ПРОСИТЬ ИНТЕРНЕТ, GPS, местоположение, макет –

ответ

2

Лучше всего было бы использовать услуги определения местоположения с помощью CWAC Место службы Poller уже сделано для нас, чтобы использовать его как раз вы должны дать промежуток времени, чтобы проснуться это

ли это как дис образом п вам нужно .jar файл, который вы можете получить его от https://www.dropbox.com/sh/pgxk2v9l5vl0h2j/3svyZnuwOK/CWAC-LocationPoller.jar

от вашей активности начинают LocationPoller и установить REPE сигнализации живать к тому времени, вы хотите

AlarmManager alarmMgr = (AlarmManager) getSystemService(ALARM_SERVICE); 
Intent i = new Intent(this, LocationPoller.class); 

Bundle bundle = new Bundle(); 
LocationPollerParameter parameter = new LocationPollerParameter(bundle); 
parameter.setIntentToBroadcastOnCompletion(new Intent(this, 
     LocationReceiver.class)); 
// try GPS and fall back to NETWORK_PROVIDER 
parameter.setProviders(new String[] { LocationManager.GPS_PROVIDER, 
     LocationManager.NETWORK_PROVIDER }); 
parameter.setTimeout(120000); 
i.putExtras(bundle); 

PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); 
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
     SystemClock.elapsedRealtime(), 300000, pi); 

сделать класс приемник Расположение приемника, откуда вы будете получать лат н LON

public class LocationReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 


    try {  
     Bundle b=intent.getExtras(); 

     LocationPollerResult locationResult = new LocationPollerResult(b); 

     Location loc=locationResult.getLocation(); 
     String msg; 

     if (loc==null) { 
     loc=locationResult.getLastKnownLocation(); 

     if (loc==null) { 
      msg=locationResult.getError(); 
     } 
     else { 
      msg="TIMEOUT, lastKnown="+loc.toString(); 
     } 
     } 
     else { 
     msg=loc.toString(); 



     Log.i("Location Latitude", String.valueOf(loc.getLatitude())); 
     Log.i("Location Longitude", String.valueOf(loc.getLongitude())); 
     Log.i("Location Accuracy", String.valueOf(loc.getAccuracy())); 




     } 

     Log.i(getClass().getSimpleName(), "received location: " + msg); 



    } 
    catch (Exception e) { 
     Log.e(getClass().getName(), e.getMessage()); 
    } 
    } 

и добавить в свой манифест

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

    <receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" /> 

    <service android:name="com.commonsware.cwac.locpoll.LocationPollerService" /> 

и декларация получателя, в которой вы будете получать все

<receiver android:name="com.RareMediaCompany.Helios.LocationReceiver" /> 
+0

Невозможно найти LocationPollerResult и LocationPollerParameter .... что это за ??? – WISHY

+0

Счастье, что было устаревшей библиотекой ... замените предыдущую с помощью этого n, это сработает ... [link] https://www.dropbox.com/sh/pgxk2v9l5vl0h2j/3svyZnuwOK/CWAC-LocationPoller.jar –

+0

I думаю, что это либо не работает, либо я сделал что-то неправильно ..... я скопировал вставку кода, но я не могу получить какое-либо место в logcat ... – WISHY

Смежные вопросы