2014-05-16 14 views
5

Tôi muốn cảnh báo người dùng khi anh ta ở gần một vị trí cụ thể. Đối với điều này tôi đã bao gồm một ProxmityAlert và một dịch vụ tương ứng trong ứng dụng của tôi. Nhưng không có vấn đề gì tôi đưa ra tọa độ, nó luôn luôn cho tôi thấy "Cảm ơn bạn đã ghé thăm khu vực của tôi !! nhập" Tôi làm điều này một cách sai lầm?Quản lý vị trí ProxmityAlert luôn nói rằng nhập

Đây là cách tôi đang làm nó:

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

}

Và đây là người nhận:

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

    } 
} 
} 

Trong Manifest, tôi đã thêm:

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

Trả lời

5

Theo quan điểm của tôi, bạn nên sử dụng nhiều thuật ngữ địa lý, là cách đơn giản nhất để đạt được những gì bạn muốn. Bạn có thể làm một cái gì đó giống như một khu vực mục tiêu. Vì vậy, mắt mục tiêu là trung tâm nơi bạn muốn người dùng rời nhóm hoặc đạt được nó.

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

Giống như trong hình ảnh mục tiêu này, ví dụ bạn sẽ phải đếm từ ngoài vào trong, tổng cộng 6 giới hạn địa lý. Các gần nhất với mục tiêu, cao hơn geofence ID 6, khu vực xa nhất từ ​​mục tiêu sẽ là ID geofence 1. Về cơ bản bạn sẽ cần phải phối hợp nhiều geofencing để đạt được những gì bạn muốn. Vì vậy, thay vì có các vị trí địa lý riêng biệt với các khu vực biên giới overlapping, bạn sẽ có các vị trí địa lý trung tâm.

Mỗi lần người dùng của bạn nhận được một giá trị geofence cao hơn, một ý định đưa ra một tín hiệu hoặc giai điệu, chẳng hạn như: "bạn đang nhận được gần gũi hơn". Cách khác cũng đúng, đối với trường hợp người dùng di chuyển xa khu vực mục tiêu: "ID địa lý của bạn thay đổi từ 3 cho 2, bạn đang di chuyển theo hướng ngược lại từ đích đến".

Mã hiện tại của bạn không tạo ra loại phân biệt các hướng khác nhau liên quan đến việc định vị địa lý, không cho thấy việc xử lý nhiều tính năng địa lý. Đó là lý do tại sao mã không hoạt động theo cách bạn muốn.

Các vấn đề liên quan