2013-07-25 27 views
5

Xin lỗi vì tiếng anh của tôi. Tôi đang cố gắng để có được một vị trí duy nhất từ ​​GPS để đặt trên các biến toàn cầu vĩ độ, kinh độ. GPS bật nhưng hoạt động vẫn tiếp tục trước khi dữ liệu được truy xuất từ ​​GPS.Cần hoạt động Android để chờ cho đến khi vị trí GPS thu được

Nhu cầu của tôi nói cách khác ... phương thức getCurrentLocation() phải kết thúc chỉ khi một vị trí đã được tìm thấy và các biến kinh độ và vĩ độ được lấp đầy, vì vậy tôi có thể sử dụng chúng theo phương pháp khác. Tôi biết ... người dùng phải chờ ... Tôi sẽ giải quyết vấn đề này hiển thị nội dung nào đó trên màn hình. Tôi nên làm gì? Cảm ơn bạn

Tôi nghĩ rằng tôi bỏ qua dừng nghe GPS ở một số nơi. Ở đâu tốt hơn?

Mã sau:

//Method to retrieve coordinates 
public void getCurrentLocation() { 
    //Use GPS if possible 
    if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
     //assign Listener to GPS 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener); 
     Toast.makeText(this, LocationManager.GPS_PROVIDER, Toast.LENGTH_SHORT).show(); 
    } 
    else if(manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){//toherwise, use NETWORK 
     //assign Listener to NETWORK 
     manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener); 
     Toast.makeText(this, LocationManager.NETWORK_PROVIDER, Toast.LENGTH_SHORT).show(); 
    } 
} 

//Class to store the location recived in two variables 
final class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location location) { 
     //coordinates storing 
     latitude = String.valueOf(location.getLatitude()); 
     longitude = String.valueOf(location.getLongitude()); 
     Toast.makeText(getApplicationContext(), latitude + longitude, Toast.LENGTH_LONG).show(); 
    } 

    @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 
    } 
} 

Trả lời

1

Nếu bạn muốn hoạt động android đợi cho đến khi vị trí GPS thu được, bạn có thể thử sử dụng AsyncTask cho điều đó. Xem Android find GPS location once, show loading dialog để biết câu trả lời. Về cơ bản trong onPreExecute bạn có thể bắt đầu hộp thoại (nó bắt đầu trước khi doInBackground được gọi). Nó có nghĩa là bạn đang chờ đợi cho đến khi bạn có thể vị trí và hiển thị hộp thoại. Sau đó, trong doInBackground bạn có thể nhận vị trí. Sau khi kết thúc, onPostExecute được gọi. Bạn có thể dừng lại là từ bên trong onPostExecute. Bạn có thể kiểm tra xem vị trí không phải là không và sau đó gọi một số chức năng khác từ bên trong onPostExecute cũng nếu bạn muốn.

Đây có thể là một cách. Bạn có thể tìm hiểu ví dụ cơ bản từ AsyncTask Android example. Bạn cũng có thể bắt đầu bằng cách đọc tài liệu here.

Một số câu hỏi hữu ích tương tự khác:

Wait for current location - GPS - Android Dev

getting location instantly in android

Hope this helps.

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