2010-08-06 32 views
5

Tôi sắp xây dựng một ứng dụng trong Android sẽ hoạt động như một thẻ đồng hồ cho nhân viên trên đường.Làm cách nào để có được vị trí GPS hiện tại?

Khi bắt đầu công việc, người dùng sẽ nhấp vào nút sẽ ghi lại vị trí GPS và thời gian hiện tại (do đó xác minh rằng anh ấy sẽ ở đâu tại một thời điểm nhất định) và một lần nữa vào cuối công việc anh ấy ghi thời gian và vị trí GPS.

Vì vậy, tôi cho rằng điều này sẽ đủ dễ dàng, ngoại trừ việc tôi không thể tìm cách thu thập dữ liệu vị trí hiện tại. Tôi có thể tìm thấy gần nhất là onLocationChanged có nghĩa là tôi không thể đọc được GPS tĩnh. Tôi biết nó có thể làm được điều này nhưng không thể tìm thấy một ví dụ làm việc về cách nó sẽ đạt được.

Trả lời

3

Sau một chút của nghiên cứu này là những gì tôi đã đưa ra:

public class UseGps extends Activity 
{ 
    Button gps_button; 
    TextView gps_text; 
    LocationManager mlocManager; 

    /** Called when the activity is first created. */ 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     gps_button = (Button) findViewById(R.id.GPSButton); 
     gps_text = (TextView) findViewById(R.id.GPSText); 

     gps_button.setOnClickListener(new OnClickListener() { 
      public void onClick(View viewParam) { 
       gps_text.append("\n\nSearching for current location. Please hold..."); 
       gps_button.setEnabled(false); 
       mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
       LocationListener mlocListener = new MyLocationListener(); 
       mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener); 
      } 
     }); 
    } 

    /* Class My Location Listener */ 
    public class MyLocationListener implements LocationListener 
    { 
     @Override 
     public void onLocationChanged(Location loc) 
     { 
      double lon = loc.getLatitude(); 
      double lat = loc.getLongitude(); 
      gps_text.append("\nLongitude: "+lon+" - Latitude: "+lat); 
      UseGps.this.mlocManager.removeUpdates(this); 
      gps_button.setEnabled(true); 
     } 

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

này thiết lập một hoạt động với một nút và TextView. Đặt trình nghe trên nút khởi động trình quản lý vị trí.

Tôi đã thiết lập một lớp, MyLocationListener, triển khai LocationListener và sau đó tôi ghi đè phương thức onLocationChanged(), về cơ bản cho biết vị trí đầu tiên được thêm vào văn bản và sau đó xóa trình quản lý vị trí.

Nhờ những người đã giúp và tôi hy vọng điều này sẽ được sử dụng cho người khác.

1

Bạn nên cố gắng android.location.LocationManager.getLastKnownLocation

Và kiểm tra thời điểm Location trở sử dụng Location.getTime(utc time).

+1

ok, và tha thứ cho sự thiếu hiểu biết của tôi, nhưng lastKnownLocation dosnt ngụ ý vị trí hiện tại của tôi tại thời điểm này .. Tôi muốn ứng dụng truy cập vị trí của tôi ngay khi tôi nhấn nút, không thể biết vị trí cuối cùng đã xảy ra nửa giờ trước 2 dặm sao đường? –

+0

sau đó onLocationChanged là cách tốt nhất để có được vị trí cập nhật nhất. – david

+0

Nhưng đó là quan điểm của tôi, nếu tôi là văn phòng phẩm và muốn có được vị trí hiện tại của tôi thì sao? Có cách nào để khởi tạo vị trí của tôi, giả sử 0 0, sau đó sẽ kích hoạt thay đổi vị trí? –

0

Yêu cầu cập nhật vị trí và tạo Trình tạo vị trí (xem LocationManager.requestLocationUpdates). Bạn sẽ nhận được thông tin cập nhật thường xuyên với thông tin về độ chính xác.

Cho đến khi bạn nhận được bản cập nhật đầu tiên, bạn có thể (như đã đăng) sử dụng LocationManager.getLastLocation() và kiểm tra dấu thời gian và độ chính xác của nó.

Lời cảnh báo - một số thiết bị quét sẽ mất nhiều thời gian để bạn đọc chính xác và hoàn toàn ngẫu nhiên.

+0

ok, vì vậy tôi nên một cái gì đó như thế này sau đó .. bấm vào nút bắt đầu và và nhận được một dấu thời gian, và về cơ bản tiếp tục bỏ phiếu cho lastKnown loaction cho đến khi tôi nhận được một vị trí với một dấu thời gian lớn hơn dấu thời gian bắt đầu của tôi .. Tôi phải nói, Tôi không thể tin rằng không có cách nào để thực hiện việc kiểm tra tại chỗ. Các thiết bị tôi đang sử dụng là khá nhanh chóng tại nhận được vị trí của tôi khi tôi sử dụng bản đồ google hoặc navigator ... –

+0

Đừng thăm dò lastKnown! Nhìn vào lần cuối được biết một lần và yêu cầu cập nhật như được hiển thị ở trên. Nếu thay đổi, bạn sẽ được thông báo. Nếu nó không thay đổi, thì lastKnown sẽ không thay đổi! – EboMike

+0

Ok, tôi thực sự không muốn xuất hiện lười biếng, nhưng tôi học tốt nhất bằng ví dụ, do đó, trên lưu ý rằng có cách nào bạn (hoặc bất cứ ai) có thể gửi một số mã mẫu? –

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