2009-05-25 12 views
4

J'essaie d'obtenir et de mettre à jour lorsque le téléphone s'approche d'un emplacement. J'ai essayé d'utiliser les deux addProximityAlert et requestLocationUpdatesaddProximityAlert ne fonctionne pas (requestLocationUpdates non plus) - 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); 

Celui-ci ne se déclenche l'intention (que je connais des œuvres puisque je peux le tirer manuellement). J'ai essayé d'utiliser un écouteur mais il n'est exécuté qu'une seule fois. Peu importe combien de fois mettre à jour le GPS, il ne sera jamais appelé à nouveau

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

c'est le code de l'activité (appelée dans le premier cas)

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

C'est le Listener

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 

} 
} 

Merci

Répondre

0

Je ne pense pas que vous devriez mettre fin à l'activité déjà dans le onCreate meth od (en appelant finish()).

+0

qui était juste une activité de débogage et je me suis intéressé à voir si elle écrit sur le journal, si la finition de l'activité doesn ne change pas beaucoup. Mais merci pour la réponse –

5

Je pense que le problème est de savoir comment vous définissez Intent/PendingIntent. Il existe deux façons de démarrer une activité à l'aide d'une intention, et le code que vous avez inclus ressemble à un croisement entre les deux.

La méthode standard de démarrage d'une activité est d'utiliser le constructeur intention qui prend le contexte actuel et la classe de l'activité et utiliser la méthode getActivity sur PendingIntent pour créer le PendingIntent:

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

Vous pouvez ajouter un IntentReceiver à votre activité dans le manifeste, avec un IntentFilter qui écoute une action particulière (comme "eu.mauriziopz.gps.ProximityAlert"). Cependant, dans ce cas, vous devez utiliser PendingIntent.getBroadcast pour créer PendingIntent.

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

Dans tous les cas, vous devez vous assurer que vous avez les autorisations correctes pour les services basés sur la localisation définis dans votre manifeste:

<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"/> 

De plus, plutôt que d'utiliser la chaîne " gps ", vous pourriez envisager d'utiliser la constante statique LocationManager.GPS_PROVIDER.

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); 

cela est important: Intent.FLAG_ACTIVITY_NEW_TASK

1

L'API définit les paramètres de addProximityAlert être lat, long, rayon, l'expiration, l'intention. Avez-vous essayé de placer l'expiration de -1 plutôt que 100000

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

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