addProximityAlert не работает (как и requestLocationUpdates) - Android - PullRequest
4 голосов
/ 25 мая 2009

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

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

Этот никогда не запускает намерение (которое, я знаю, работает, так как я могу запустить его вручную) Я попытался использовать слушателя, но он выполняется только один раз. Независимо от того, сколько раз я обновляю gps, он больше не вызывается

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

это код активности (вызывается в первом случае)

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

Это слушатель

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

}
}

Спасибо

Ответы [ 4 ]

5 голосов
/ 04 июня 2009

Я думаю, проблема в том, как вы определяете свой Intent / PendingIntent. Есть два способа запустить Activity с помощью Intent, и код, который вы включили, выглядит как нечто среднее между ними.

Стандартный способ запуска Activity - использовать конструктор Intent, который принимает текущий контекст и класс Activity, и использовать метод getActivity в PendingIntent для создания PendingIntent:

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

В качестве альтернативы, вы можете добавить IntentReceiver к вашей активности в манифесте с помощью IntentFilter, который прослушивает определенное действие (например, «eu.mauriziopz.gps.ProximityAlert»). Однако в этом случае вам нужно использовать PendingIntent.getBroadcast для создания PendingIntent.

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

Во всех случаях вам необходимо убедиться, что вы получили правильные разрешения для служб на основе местоположения, определенных в вашем манифесте:

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

Кроме того, вместо использования строки "gps", вы можете использовать статическую константу LocationManager.GPS_PROVIDER.

1 голос
/ 19 декабря 2011

API определяет параметры addProximityAlert как широта, длинна, радиус, срок действия, намерение. Вы пытались установить срок действия -1 вместо 100000

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

lm.addProximityAlert(12, 12, 100, -1, pIntent);
1 голос
/ 21 июня 2011
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);

это важно: Intent.FLAG_ACTIVITY_NEW_TASK

0 голосов
/ 01 июня 2009

Я не думаю, что вам следует завершать Activity уже в методе onCreate (вызывая finish ()).

...