2016-05-19 14 views
2

Ich verwende Android LocationManager, um zu überprüfen, ob ein Benutzer in der Nähe eines von mir definierten Standortes ist.Woher weiß man, wann ein Benutzer irgendwo war?

Ich verwende addProximityAlert Methode, damit ich eine Absicht erhalte, wenn der Benutzer ist, wo ich erwarte.

Allerdings möchte ich wissen, ob sich ein Benutzer für eine bestimmte Zeit an dem angegebenen Ort befindet, denn wenn ein Benutzer den von mir überprüften Standort durchquert, erhalte ich möglicherweise auch die Absicht.

Mein erster Ansatz ist, dass ich nach einiger Zeit (einige Minuten) kann ich es noch einmal überprüfen. Gibt es einen besseren Ansatz? Gibt es eine Möglichkeit, die Absicht erst nach einiger Zeit zu erhalten?

Vielen Dank.

Antwort

0

Um dieses Problem zu lösen, können Sie eine if Anweisungen verwenden, um die verstrichene Zeit des Benutzers in einer bestimmten Entfernung zu speichern.
Sie könnten System.currentTimeMillis() verwenden, um die aktuelle Zeit zu erhalten und dann die ursprüngliche Startzeit von dieser subtrahieren, um Ihnen die verstrichene Zeit zu geben. Hier ist etwas, was Sie tun können:

long startTime = 0; 
long elapsedTime; 
// Set up LocationManager here 
Location targetPlace; 

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

    Location location = locationManager.getLastKnownLocation(provider); 
    // Checks to see if the user was already there when they opened the activity 
    if(location.distanceTo(targetPlace) == 5) { 
     startTime = System.currentTimeMillis(); 
    } 
    targetPlace = new Location(provider); 
} 

@Override 
public void onLocationChanged(Location location) { 
    if(startTime != 0) { 
     // Check to see if the user is in a given place 
     if (location.distanceTo(targetPlace) == 5) { 
      elapsedTime = (System.currentTimeMillis() - startTime)/1000; // Time in seconds 
     } else { 
      // User is not near that location 
     } 
    } else { 
     startTime = System.currentTimeMillis(); 
    } 
} 

Change ‚5‘ in der if Aussage zu, was auch immer Sie den Radius wollen. Hoffe das hilft!

+0

Ich bekomme die Idee, aber das ist nicht was ich will und es ist nicht Näherungsalarm verwenden. Was Ihr Code macht, ist die Zeit zwischen onCreate und locationChanged zu bekommen. Was ich möchte, ist nicht in einer Aktivität, sondern im Hintergrund, um nur benachrichtigt zu werden, wenn der Benutzer für X Minuten am Ort war. –

Verwandte Themen