2016-11-13 139 views
1

我在使用GPS设置当前位置时遇到问题。 它在Android 5.0.1(小米红米Note 3) 上的工作方式应该像它应该的(关于查找位置的通知,然后正确设置)但是例如在Android 6.0(索尼Xperia Z5 Compact)上它根本不起作用。没有通知,永远不会设置GPS位置。在Xperia我甚至没有在地图右侧显示的地图上的按钮code(mMap.setMyLocationEnabled(true);)Android GPS定位问题

在Android 4.4.2(Gigabyte GsMart Roma R2plus)上也没有通知出现,但我可以看到当前位置的按钮在屏幕上方右侧。但仍然不能像它应该那样工作。

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 

    mMap.setMyLocationEnabled(true); 
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    Criteria criteria = new Criteria(); 
    String provider = locationManager.getBestProvider(criteria, false); 

    Location location = locationManager.getLastKnownLocation(provider); 
    if (location != null) { 
     latitude = location.getLatitude(); 
     longitude = location.getLongitude(); 
    } else { 

    } 

    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); 
    emailicek = user.getEmail(); 
    emailicek = emailicek.replace(".", ""); 
    mDatabase = FirebaseDatabase.getInstance().getReference(); 

    if (latitude != 0) { 
     if (longitude != 0) { 
      mDatabase.child("userdata/" + email + "/latitude").setValue(latitude); 
      mDatabase.child("userdata/" + email + "/longitude").setValue(longitude); 
     } 
    } 
    LatLng latLng = new LatLng(latitude, longitude); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
    //mMap.animateCamera(CameraUpdateFactory.zoomTo(14)); 

    if (latitude != 0) { 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(14)); 
    } else { 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(1)); 
    } 
} 

回答

1

您是否确定您在Manifest中请求了正确的权限? 得到最后已知位置,你需要

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

基于网络位置,或者:

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

的基于GPS的位置。

顺便说有很多很好的理由,为什么你应该考虑迁移到Play服务才能得到你的位置,我强烈建议你阅读本:

Getting the Last Known Location - Android Developers

+0

谢谢,但我有这些权限:) – Sam