2016-04-09 16 views
5

tôi đã phát triển một ứng dụng Android đơn giản và trong ứng dụng này đơn giản, tôi muốn lấy dữ liệu GPS Latitued và Longitued, nó hoạt động một cách chính xác trong giả lập của tôi, nhưng khi tôi cài đặt trên thiết bị Android thực nó không hoạt động. Xin hãy giúp tôi giải quyết vấn đề này và tiếp theo là mã của tôi. Cảm ơn trướcAndroid GPS có được vị trí hiện tại

public class getLocation extends AppCompatActivity { 

private Button btnGetLocation; 
private TextView textGPS; 
private LocationManager locationManager; 
private LocationListener locationListener; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_get_location); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 


    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    btnGetLocation = (Button) findViewById(R.id.btnGetLocation); 
    textGPS = (TextView) findViewById(R.id.textViewGps); 
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

    locationListener = new LocationListener() { 
     @Override 
     public void onLocationChanged(Location location) { 
      textGPS.setText("lat: "+location.getLatitude()+" long: "+location.getLongitude()); 

     } 

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

     } 

     @Override 
     public void onProviderEnabled(String provider) { 

     } 

     @Override 
     public void onProviderDisabled(String provider) { 
      startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 

     } 
    }; 

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ 
     if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
      requestPermissions(new String[]{ 
        Manifest.permission.ACCESS_FINE_LOCATION, 
        Manifest.permission.ACCESS_COARSE_LOCATION, 
        Manifest.permission.INTERNET 
      },10); 
      return; 
     } 
    }else{ 
     configureButton(); 
    } 

} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 

    switch (requestCode){ 
     case 10: 
      if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) 
       configureButton(); 
      return; 
    } 
} 

private void configureButton() { 

    btnGetLocation.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      locationManager.requestLocationUpdates("gps", 0, 0, locationListener); 
     } 
    }); 
} 

} 

Screen shot từ giả lập: enter image description here

Screen shot từ điện thoại di động: enter image description here

+1

Bạn đang yêu cầu chỉ GPS ... Thiết bị của bạn cần liên hệ với vệ tinh! Đi ra ngoài và kiểm tra nó! Ngoài ra, bạn không nên sử dụng "gps" cứng mã hóa, bạn nên sử dụng 'locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener);' –

+0

cám ơn tôi đi ra ngoài nó hoạt động –

Trả lời

4

Bạn đang yêu cầu chỉ GPS ... Điện thoại của bạn cần phải tiếp xúc với các vệ tinh! Trong không gian! Đi ra ngoài và kiểm tra nó! Đây là vấn đề phổ biến khi thử nghiệm mã chỉ sử dụng GPS, nó không hoạt động tốt trong nhà.

Ngoài ra, bạn không nên sử dụng "gps" cứng mã hóa, bạn nên sử dụng:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 

Đối với việc sử dụng FusedLocationProviderAPI, bạn sẽ mất một số chính xác, nhưng nó cung cấp nhiều cải thiện hiệu suất pin, vì nó dựa chủ yếu vào Vị trí mạng và chỉ sử dụng GPS nếu cần thiết. Để có ví dụ hoàn chỉnh về cách sử dụng, hãy xem tại đây: https://stackoverflow.com/a/30255219/4409409

+0

Nó hoạt động tốt nhưng khi tôi muốn lưu các Latitued và Longitued đến cơ sở dữ liệu tôi không thể có được chúng. –

+0

@GulMuhammadAkbari Bạn cũng nên yêu cầu Vị trí mạng, thường cho Địa điểm nhanh hơn (khi có mạng WiFi trong phạm vi). Tóm lại, bạn chỉ cần đợi cho đến khi bạn có được một Vị trí trước khi lưu nó vào cơ sở dữ liệu, vì vậy hãy lưu nó vào cơ sở dữ liệu khi bạn nhận được Vị trí trong cuộc gọi lại 'onLocationChanged()'. –

1

Các Google Play services location APIs được ưa thích hơn các API vị trí khuôn khổ Android (android.location) như là một cách thêm nhận thức về vị trí vào ứng dụng của bạn.

Bạn có thể tìm ví dụ về cách sử dụng nó ngay here.

P.S. Đừng quên kiểm tra xem các quyền được cấp trên thiết bị của bạn hay chưa.

2

thêm vào mã của bạn. khi ứng dụng này chạy ở vị trí cuối cùng được biết đến trong nhà.

 // Get the location from the given provider 
     Location location = locationManager 
       .getLastKnownLocation(provider); 

     locationManager.requestLocationUpdates(provider, 1000, 1, this); 
Các vấn đề liên quan