2014-05-16 2 views
5

Я хочу предупредить пользователя, когда он находится в определенном месте. Для этого я включил ProxmityAlert и соответствующую службу в своем приложении. Но независимо от того, какие координаты я даю, он всегда показывает мне «Спасибо, что посетил мой район!» Ввод «Я делаю это неправильно?Менеджер местоположения ProxmityAlert всегда говорит ввод

Это, как я это делаю:

public class ProxTest extends Activity { 
LocationManager lm; 
double lat = 30.085514, long1 = 77.082603; 
float radius = 50; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lm = (LocationManager) getSystemService(LOCATION_SERVICE); 
    Intent i = new Intent(); 
    i.setAction("com.example.test.proximityalert"); 

    PendingIntent pi = PendingIntent.getBroadcast(getApplicationContext(), 
      -1, i, 0); 
    lm.addProximityAlert(lat, long1, radius, -1, pi); 
    sendBroadcast(i); 
    System.out.println("Prox alert added "); 
} 

}

И это приемник:

public class ProximityReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context arg0, Intent arg1) { 
    // TODO Auto-generated method stub 
    String k = LocationManager.KEY_PROXIMITY_ENTERING; 

    boolean state = arg1.getBooleanExtra(k, false); 

    if (state) { 

     Toast.makeText(arg0, "Welcome to my Area", Toast.LENGTH_LONG) 
       .show(); 
    } else { 

     Toast.makeText(arg0, "Thank you for visiting my Area!!"+k, 
       Toast.LENGTH_LONG).show(); 

    } 
} 
} 

В манифесте, я добавил:

<receiver android:name="ProximityReceiver"> 
     <intent-filter> 
     <action android:name="com.example.test.proximityalert"> 
     </action> 
     </intent-filter> 
    </receiver> 

ответ

5

На мой взгляд, вы должны использовать несколько геопостов, как самый простой способ добиться того, чего вы хотите. Вы можете сделать что-то вроде целевой области. Таким образом, целевой глаз является центром, в котором вы хотите, чтобы пользователь направлялся или достигал его.

http://www.cision.com/us/wp-content/uploads/2008/10/j0439610.png

Как и в этом целевом изображении, например, вы будете считать от снаружи внутрь, в общей сложности 6 геозонов. Ближе к цели, чем выше идентификатор Geofence ID 6, тем более удаленная область от цели будет идентификатором geofence ID 1. В основном вам нужно будет координировать несколько геообъектов для достижения того, что вы хотите. Таким образом, вместо разделенных геофорумов с граничными областями overlapping у вас будут ориентированные геофотоснимки.

Каждый раз, когда ваш пользователь получает более высокое значение геофенсации, намерение дает сигнал или тон, например: «вы становитесь ближе». И наоборот, для случая, когда пользователь движется далеко от целевой области: «ваш идентификатор геофорумы изменен с 3 на 2, вы двигаетесь в противоположном направлении от целевого пункта назначения».

Ваш текущий код не делает такого различия между разными направлениями, связанными с геообстановкой, и не показывает обработку нескольких геообъектов. Вот почему код не ведет себя так, как вам хотелось бы.