У меня было хорошее рабочее приложение для GetGeoLocation для уровня API 23 (с использованием checkSelfPermission). Но затем мне пришлось сделать его совместимым с уровнем API 21. Итак, checkSelfPermission не работал, поскольку он был введен в уровне API 23.
Итак, я изменил код, чтобы учесть это:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CheckForCoarseLocationPermission();
}
private void CheckForCoarseLocationPermission()
{
if (android.os.Build.VERSION.SDK_INT >= 23)
{
// ANDROID 6.0 AND UP!
boolean accessCoarseLocationAllowed = false;
try
{
// Invoke checkSelfPermission method from Android 6 (API 23 and UP)
java.lang.reflect.Method methodCheckPermission = Activity.class.getMethod("checkSelfPermission", java.lang.String.class);
Object resultObj = methodCheckPermission.invoke(this, Manifest.permission.ACCESS_COARSE_LOCATION);
int result = Integer.parseInt(resultObj.toString());
if (result == PackageManager.PERMISSION_GRANTED)
{
accessCoarseLocationAllowed = true;
}
}
catch (Exception ex)
{
}
if (accessCoarseLocationAllowed)
{
Log.v("TAG","Granted");
LocationManager locationManager= (LocationManager)getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0,new LocationListener());//ERROR Happening Here!!!!!!!!!!!
}
try
{
// We have to invoke the method "void requestPermissions (Activity activity, String[] permissions, int requestCode) "
// from android 6
java.lang.reflect.Method methodRequestPermission = Activity.class.getMethod("requestPermissions", java.lang.String[].class, int.class);
methodRequestPermission.invoke(this, new String[]
{
Manifest.permission.ACCESS_FINE_LOCATION
}, 0x12345);
}
catch (Exception ex)
{
}
}
}
Теперь LocationManager.requestLocationUpdate выдает ошибку Вызов требует разрешения, которое может быть отклонено пользователем: код должен явно проверять наличие разрешения (с checkPermission
) или явно обрабатывать потенциальное SecurityException
меньше
Как с этим справиться, если я хочу использовать LocationManager и CheckPermission для уровня API >=21.
Пожалуйста, помогите.