2009-05-25 13 views
4

Ich versuche zu bekommen und zu aktualisieren, wenn das Telefon in der Nähe eines Ortes kommt. Ich habe versucht, beide unter Verwendung von addProximityAlert und requestLocationUpdatesaddProximityAlert funktioniert nicht (weder requestLocationUpdates) - Android

LocationManager lm =(LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Location l = lm.getLastKnownLocation("gps"); 
    Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert"); 
    PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); 
    lm.addProximityAlert(12, 12, 100, 1000000, pIntent); 

Dieser nie die Absicht feuert (was ich sicher wissen, da ich es manuell abfeuern kann). Ich habe versucht, einen Listener zu verwenden, aber es wird nur einmal ausgeführt. Egal, wie oft ich die GPS aktualisieren es nie wieder aufgerufen wird

ProximityListener pl = new ProximityListener(); 
    lm. requestLocationUpdates("gps", 2000, 10, pl); 

Dies ist der Code der Aktivität (im ersten Fall genannt)

public class ProximityAlert extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    Log.d("intent", "Hi"); 
    finish(); 
} 

Dies ist der Zuhörer

public class ProximityListener implements LocationListener { 
String DEBUG_TAG = "ProximityListener"; 
@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 
    Log.d(DEBUG_TAG, location.toString()); 

} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 
} 

Danke

Antwort

0

Ich glaube nicht, dass Sie die Aktivität bereits in der onCreate Meth beenden sollten od (durch Aufruf von finish()).

+0

, die nur eine Debug-Aktivität war Einstellung und ich war daran interessiert, wenn sie auf der Log schreibt, so die Aktivität Finishing doesn ändere nicht viel. Aber danke für die Antwort –

5

Ich denke, das Problem ist, wie Sie Ihre Absicht/PendingIntent definieren. Es gibt zwei Möglichkeiten, eine Aktivität mit einer Absicht zu starten, und der Code, den Sie eingefügt haben, sieht wie eine Kreuzung zwischen den beiden aus.

Der Standard Weg, um eine Aktivität des Startens der Intent-Konstruktor zu verwenden, die den aktuellen Kontext und die Tätigkeit der Klasse und verwenden Sie die getActivity Methode auf PendingIntent die PendingIntent erstellen nimmt:

Intent intent = new Intent(this, ProximityAlert.class); 
PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent, 0); 

Alternativ können Sie fügen Ein IntentReceiver zu deiner Aktivität im Manifest, mit einem IntentFilter, der auf eine bestimmte Aktion wartet (wie "eu.mauriziopz.gps.ProximityAlert"). In diesem Fall müssen Sie jedochverwenden, um den PendingIntent zu erstellen.

Intent intent = new Intent("eu.mauriziopz.gps.ProximityAlert"); 
PendingIntent pIntent = PendingIntent.getBroadcast(this, 0, intent, 0); 

In allen Fällen müssen Sie sicherstellen, dass Sie die richtigen Berechtigungen für standortbasierte Dienste in Ihrem Manifest definiert haben:

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

Auch anstatt die Zeichenfolge " gps "können Sie die statische Konstante LocationManager.GPS_PROVIDER verwenden.

1
Intent intent = new Intent("com.sccp.fourgdummy.REQUEST_DFGS"); 
intent.putExtra("launch_tab", "otp"); 
PendingIntent proximityIntent = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); 

Das ist wichtig: Intent.FLAG_ACTIVITY_NEW_TASK

1

Die API definiert die Parameter des addProximityAlert lat zu sein, lange, Radius, Exspiration Absicht. Haben Sie versucht, den Ablauf zu -1 statt 100000

lm.addProximityAlert(12, 12, 100, 1000000, pIntent);

lm.addProximityAlert(12, 12, 100, -1, pIntent);