2016-04-07 3 views
-4

was ist der beste Weg, Benutzerstandort zu erhalten, nachdem jede 2 Minuten sogar Sie app Dank im Voraus getötetAndroid Wie kontinuierlich Benutzer Lage zu erhalten, auch die App getötet

+2

erstellen ein Hintergrunddienste und dieser Dienst arbeiten im Hintergrund selbst. erhalten Sie fortwährend Standort .. –

+0

aber wenn Service ist, dann stoppen, wer ich Aufstellungsortaktualisierung erhalten kann –

+1

Ja können Sie dieses erzielen, indem Sie einige Bemühung und R & D setzen. – Aks4125

Antwort

0

Sie können eine Background Service für die Verwendung wählen Sie Ihre Aktivität.

In diesem Dienst stellen Sie Ihren Dienst so ein, dass er in dem von Ihnen gewünschten Intervall nach Ihrem Standort fragt.

Danach können Sie LocalBroadcastManager verwenden, um das Ergebnis Ihrer Interesse zu senden, um die nützlichen Ergebnisse zu Ihrer Anwendung zurückzugeben.

Hoffe es hilft!

Prost! Fröhliche Programmierung!

+0

ausgeführt wird, aber wenn App getötet wird oder Gerät neu starten, dann stoppt der Dienst Bitte sagen Sie mir eine andere Möglichkeit –

+0

Sie können einen Broadcast-Empfänger hinzufügen, um den Boot abzuschließen – Ameer

+0

@NisarAhmad http://developer.android.com/ Referenz/android/app/Service.html # START_STICKY – sihao

0

Verwenden Sie eine Started service, um Code im Hintergrund auszuführen, selbst wenn die App beendet wird. Verwenden Sie Timer und Timer task, um den Standort-Erfassungscode in festgelegten Intervallen auszuführen.

Timer Beispiel

new Timer().scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() {} 
     }, 0, 1000); 
+0

können Sie mir bitte Probe senden –

+0

Sie können Beispiele finden Sie unter den Links zur Verfügung gestellt und versuchen Sie suchen Antworten auf spezifische Probleme, denen Sie begegnen, während Sie versuchen, dies selbst zu implementieren. –

+0

Ich habe ein Beispiel für den Timer hinzugefügt. Wie man die verschiedenen Arten von Diensten verwendet, ist in der gestarteten Dienstverbindung. Ich hoffe, dies beantwortet Ihre ursprüngliche Frage –

0

Abgesehen von dem, was J Whitfield und Sihao vorgeschlagen haben, können Sie auch Ihren Dienst als Dienst starten (keine Intent Service) machen. Dann geben Sie auf dem onStartCommand des Dienstes START_STICKY zurück.

Sie können auch versuchen, Ihren Dienst in einem separaten Prozess auszuführen, damit er nicht beendet wird, selbst wenn Ihre App getötet wird.

3

Folgen dieser Schritte

1) Diejenigen Code in Ihrem Manifest File.Create Rundfunkempfänger und Service schreiben.

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 

    <receiver 
    android:name=".activity.Timerservice" 
    android:process=":remote" > 
    </receiver> 

    <service 
    android:name=".model.GPSTracker" 
    android:exported="false" /> 

2) in der Hauptaktivität auf method.for erstellen weiterhin Intervallzeit fix erhalten aktuelle lat-long

public void scheduleAlarm() { 
    // Construct an intent that will execute the AlarmReceiver 
    Intent intent = new Intent(getApplicationContext(), Timerservice.class); 
    // Create a PendingIntent to be triggered when the alarm goes off 
    pIntent = PendingIntent.getBroadcast(this, Timerservice.REQUEST_CODE, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    // Setup periodic alarm every 5 seconds 
    long firstMillis = System.currentTimeMillis(); // alarm is set right away 
    alarm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    // First parameter is the type: ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC_WAKEUP 
    // Interval can be INTERVAL_FIFTEEN_MINUTES, INTERVAL_HALF_HOUR, INTERVAL_HOUR, INTERVAL_DAY 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, firstMillis, 
      60000, pIntent); 

} 

3) TimeService.java (Broadcast Receiver Klasse)

public class Timerservice extends BroadcastReceiver { 
public static final int REQUEST_CODE = 12345; 
Context mContext; 
public static final String ACTION = "com.codepath.example.servicesdemo.alarm"; 

// Triggered by the Alarm periodically (starts the service to run task) 
@Override 
public void onReceive(Context context, Intent intent) { 


    final LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     Intent i1 = new Intent(context, AlertDialogActivity.class); 
     i1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i1); 
     // buildAlertMessageNoGps(); 
    }else{ 
     Intent i = new Intent(context, GPSTracker.class); 
     context.startService(i); 
    } 
} 

} 

4) GPSTracker.class

public class GPSTracker extends Service implements LocationListener { 
Context mContext; 

// flag for GPS status 
boolean isGPSEnabled = false; 

// flag for network status 
boolean isNetworkEnabled = false; 

boolean canGetLocation = false; 

Location location; // location 
double latitude; // latitude 
double longitude; // longitude 

double Lastlatitude; // latitude 
double Lastlongitude; // longitude 

double totalDistance, Totalkm; 

SessionManagement sessionManagement; 

// The minimum distance to change Updates in meters 
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

// The minimum time between updates in milliseconds 
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

// Declaring a Location Manager 
protected LocationManager locationManager; 

public GPSTracker() { 
    //super("GPS"); 
} 
public GPSTracker(Context mContext) { 
    //super(""); 
    this.mContext = mContext; 
    getLocation(); 
} 

public Location getLocation() { 
    try { 
     locationManager = (LocationManager) mContext 
       .getSystemService(LOCATION_SERVICE); 

     Criteria locationCritera = new Criteria(); 
     String providerName = locationManager.getBestProvider(locationCritera, 
       true); 
     if (providerName != null) 
      location = locationManager.getLastKnownLocation(providerName); 

     GPSTracker locationListener = new GPSTracker(); 

     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
       0, locationListener); 


     // getting GPS status 
     isGPSEnabled = locationManager 
       .isProviderEnabled(LocationManager.GPS_PROVIDER); 

     // getting network status 
     isNetworkEnabled = locationManager 
       .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

     if (!isGPSEnabled && !isNetworkEnabled) { 
      // no network provider is enabled 
     } else { 
      this.canGetLocation = true; 
      // First get location from Network Provider 

      if (isNetworkEnabled) { 
       locationManager.requestLocationUpdates(
         LocationManager.NETWORK_PROVIDER, 
         MIN_TIME_BW_UPDATES, 
         MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
       Log.d("Network", "Network"); 
       if (locationManager != null) { 
        location = locationManager 
          .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
        if (location != null) { 
         latitude = location.getLatitude(); 
         longitude = location.getLongitude(); 
         Log.i("location", +latitude + " " + longitude); 
         // Toast.makeText(getApplicationContext(),"LatLang is" +latitude+" "+longitude,Toast.LENGTH_LONG).show(); 
        } 
       } 
      } 
      // if GPS Enabled get lat/long using GPS Services 
      if (isGPSEnabled) { 
       if (location == null) { 
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
        Log.d("GPS Enabled", "GPS Enabled"); 
        if (locationManager != null) { 
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 
      } 
     } 

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

    return location; 
} 

public void stopUsingGPS() { 
    if (locationManager != null) { 
     locationManager.removeUpdates(GPSTracker.this); 
    } 
} 

public double getLatitude() { 
    if (location != null) { 
     latitude = location.getLatitude(); 
    } 

    // return latitude 
    return latitude; 
} 

public double getLongitude() { 
    if (location != null) { 
     longitude = location.getLongitude(); 
    } 

    // return longitude 
    return longitude; 
} 

public boolean canGetLocation() { 
    return this.canGetLocation; 
} 


@Override 
public void onLocationChanged(Location location) { 
    if (location != null) { 
     this.location = location; 
     getLatitude(); 
     getLongitude(); 
    } 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 

} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 


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

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

} 
@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 
Verwandte Themen