位置获取
Location fetching
我只是使用上面的代码来获取 location.It 在我的测试 phone nokkia 2 和 redmi 5a 中工作正常。但它在其他 phones 中不起作用
像 moto g5, Samsung j6 等
我只是检查了权限,它的所有 good.permission 位置都已打开,
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
已授予这些用户权限....
仍然在一些 phones 中,此代码不起作用..
请帮我找到解决办法。
private void location() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Turn On Location", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return;
}else{
Toast.makeText(MainActivity.this, "in", Toast.LENGTH_SHORT).show();
LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!enabled) {
Toast.makeText(this, "please turn on your location", Toast.LENGTH_LONG).show();
}
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
locationManager.getProvider(LocationManager.GPS_PROVIDER);
provider = locationManager.getBestProvider(criteria, false);
if (provider != null && !provider.equals("")) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location2 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Location location3 = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
final int minTime = 1000;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, 0, this);
if (location1 != null) {
onLocationChanged(location1);
} else if (location2 != null) {
onLocationChanged(location2);
} else if (location3 != null) {
onLocationChanged(location3);
} else {
Toast.makeText(getBaseContext(), "network error..", Toast.LENGTH_SHORT).show();
Log.e("TAG", "your location can't get...." + location1);
}
} else {
Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
}
}
}
尝试下面的代码而不是 LocationManager
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});
我只是使用上面的代码来获取 location.It 在我的测试 phone nokkia 2 和 redmi 5a 中工作正常。但它在其他 phones 中不起作用 像 moto g5, Samsung j6 等
我只是检查了权限,它的所有 good.permission 位置都已打开,
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
已授予这些用户权限.... 仍然在一些 phones 中,此代码不起作用.. 请帮我找到解决办法。
private void location() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(MainActivity.this, "Turn On Location", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
return;
}else{
Toast.makeText(MainActivity.this, "in", Toast.LENGTH_SHORT).show();
LocationManager mlocManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
boolean enabled = mlocManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!enabled) {
Toast.makeText(this, "please turn on your location", Toast.LENGTH_LONG).show();
}
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
locationManager.getProvider(LocationManager.GPS_PROVIDER);
provider = locationManager.getBestProvider(criteria, false);
if (provider != null && !provider.equals("")) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location1 = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location location2 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Location location3 = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER);
final int minTime = 1000;
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, minTime, 0, this);
locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, minTime, 0, this);
if (location1 != null) {
onLocationChanged(location1);
} else if (location2 != null) {
onLocationChanged(location2);
} else if (location3 != null) {
onLocationChanged(location3);
} else {
Toast.makeText(getBaseContext(), "network error..", Toast.LENGTH_SHORT).show();
Log.e("TAG", "your location can't get...." + location1);
}
} else {
Toast.makeText(getBaseContext(), "No Provider Found", Toast.LENGTH_SHORT).show();
}
}
}
尝试下面的代码而不是 LocationManager
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
}
});