2011-01-20 32 views
8

tôi Tring sử dụng gps trên giả lập android, tôi đã đoạn mã sau:Android - Không thể có được vị trí gps trên giả lập

public class NL extends Activity { 

private LocationManager locmgr = null; 

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.nl); 

     locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     Criteria crit = new Criteria(); 
     crit.setAccuracy(Criteria.ACCURACY_FINE); 
     String provider = locmgr.getBestProvider(crit, true); 
     Location loc = locmgr.getLastKnownLocation(provider); 


     Toast msg = Toast.makeText(this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
     msg.show(); 
    } 
} 

tôi đã thêm dòng sau vào manifest:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

và tôi đã thiết lập gps vị trí với phương pháp DDMS và một trong hai phương pháp sửa chữa địa lý, nhưng khi tôi chạy mã này, tôi nhận được một NullPointerExeption tại dòng Toast, có lẽ gây loc là null .

Tôi không hiểu vị trí của lỗi ... bạn có thể giúp tôi không?


CẬP NHẬT!

Cảm ơn sự giúp đỡ của bạn, bây giờ tôi sử dụng mã sau và tôi không nhận được bất kỳ lỗi nào, nhưng nó không chạy mã bên trong onChangeLocation ... nó không chạy Bánh mì nướng và không trả lại bất kỳ tin nhắn trong nhật ký!

public class NL extends Activity { 

     private LocationManager locmgr = null; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.nl); 

      locmgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

     // Define a listener that responds to location updates 
      LocationListener locationListener = new LocationListener() { 
       public void onLocationChanged(Location loc) { 
        // Called when a new location is found by the network location provider. 
        Log.i("NOTIFICATION","onLocationChenged Triggered"); 

        Toast msg = Toast.makeText(NetworkLocator.this, "Lon: " + Double.toString(loc.getLongitude()) + " Lat: " + Double.toString(loc.getLatitude()), Toast.LENGTH_SHORT); 
        msg.show(); 
       } 

       public void onStatusChanged(String provider, int status, Bundle extras) {} 

       public void onProviderEnabled(String provider) {} 

       public void onProviderDisabled(String provider) {} 
       }; 

      // Register the listener with the Location Manager to receive location updates 
      locmgr.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener); 
     } 
    } 

Cảm ơn!

+2

bạn đã xác minh xem * locmgr.getBestProvider * có thực sự trả về "gps" không? anyway, bạn chắc chắn nên thực hiện một * LocationListener * và chuyển nó đến LocationManager với * requestLocationUpdates() * –

+0

getBestProvider trả về "gps". có tôi để thêm một locationlistener ngay cả khi tôi cố gắng để có được locatio với lastKnownLocation? cảm ơn sự giúp đỡ của bạn –

+0

@Marco Faion Xin vui lòng giữ cho câu trả lời ur cập nhật ... Tôi đã trả lời đã một lần cho bạn và bạn đã không đưa ra bất kỳ phản hồi nào về câu trả lời! > 'http: // stackoverflow.com/questions/4591765/android-sqlite-database-method-undefined-fot-type/4591843 # 4591843' – Beasly

Trả lời

7

tìm thấy giải pháp:

LocationManager.NETWORK_PROVIDER là SAI.

chỉnh sửa: LocationManager.GPS_PROVIDER

+1

Theo kinh nghiệm của tôi, trình mô phỏng dường như không phản hồi các thay đổi vị trí được gửi qua DDMS khi nhà cung cấp được đặt thành NETWORK_PROVIDER, nhưng sẽ được đặt thành GPS_PROVIDER như bạn đã lưu ý. Điều này trông giống như al giả trong giả lập với tôi, hoặc ít nhất là một hành vi mà nó không rõ ràng. – Mick

1

nếu tất cả các bạn những gì bạn mô tả được thực hiện hơn có lẽ bạn không có lẽ không ur gps đang bật trong emulator.go để thiết lập: -> Vị trí và bảo mật: -> và sử dụng satelites gps nên được kiểm tra


chỉnh sửa: ithink bạn phải sử dụng trình quản lý vị trí không có loại tiêu chí.



LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 

loc=mlocManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

------ hơn cố gắng để có được lâu. và lat.

+0

"sử dụng gps satelites" được chọn –

0

Bạn có chắc chắn rằng thiết bị mô phỏng của bạn thực sự đang hỗ trợ GPS không? Tôi nghĩ rằng có một tùy chọn thêm cho điều này ...

này có thể giúp quá:

Cảm ơn! Đối với tất cả: Bạn có thể thay đổi mục tiêu xây dựng cho dự án của bạn bất kỳ lúc nào trong Eclipse: Nhấn chuột phải vào dự án trong Package Explorer, chọn Properties> Android và sau đó kiểm tra 'Google API' cho Project Target. - Nhà phát triển làm việc với cài đặt văn hóa không phải tiếng Anh có thể nhận thấy rằng việc nhấn nút Gửi trong Điều khiển vị trí không gửi vị trí mới cho trình giả lập Android. Nó được sửa với bản phát hành sắp tới 7 của các công cụ SDK; để khắc phục nhanh, bạn có thể thay đổi ngôn ngữ của mình thành 'en'. (Xem code.google.com/p/android/issues/detail?id=915 để biết chi tiết.) - Patrick de Kleijn

nguồn: GPS on emulator doesn't get the geo fix - Android

8

Emulator chỉ không có bất kỳ vị trí tại bắt đầu. Theo phương thức doc, phương thức 'getLastKnownLocation' có thể trả về null, vì vậy, không sao. Trong trường hợp đó, bạn nên chờ cập nhật vị trí (bạn có thể sử dụng phương thức requestLocationUpdates từ LocationManager).Bạn có thể kích hoạt cập nhật vị trí trên mô-đun gps giả lập bằng lệnh sau:

adb -e emu geo fix 50 50 
Các vấn đề liên quan