Я пытаюсь запросить разрешения ACCESS_FINE_LOCATION
, чтобы получить текущее местоположение пользователя.ActivityCompat.requestPermissions не отображает приглашение
My logging указывает, что мое приложение в настоящее время не имеет этого разрешения при запросе ContextCompat.checkSelfPermission()
, но при вызове ActivityCompat.requestPermissions()
ничего не отображается.
Код моей карты Google (реализация OnMapReadyCallback
и ActivityCompat.OnRequestPermissionsResultCallback()
) находится в FragmentActivity
.
Мне удалось получить функцию requestPermissions()
, успешно работающую в других действиях в приложении, это только та, что с картой Google. Он не работает при размещении в методе onCreate()
Activity
или в onMapReady()
(там, где он должен идти).
if(ContextCompat.checkSelfPermission(LocationActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "not granted");
final String[] permissions = new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION};
if(ActivityCompat.shouldShowRequestPermissionRationale(this, android.Manifest.permission.ACCESS_FINE_LOCATION)) {
Log.d(TAG, "rationale");
// Explain to the user why permission is required, then request again
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("We need permissions")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
});
AlertDialog alert = builder.create();
alert.show();
} else {
Log.d(TAG, "request" + android.Manifest.permission.ACCESS_FINE_LOCATION);
// If permission has not been denied before, request the permission
ActivityCompat.requestPermissions(LocationActivity.this, permissions, 1);
}
} else {
Log.d(TAG, "granted");
}
Любые идеи? Это как-то связано с классом моей деятельности (FragmentActivity
) или возможно, что карта Google, вызывающая запрос разрешений асинхронно?
Я удивлен, что это скомпилировано. 'checkSelfPermission()' использует 'LocationActivity.this'. Второй 'requestPermissions()' использует 'PermissionsRequestActivity.this'. – CommonsWare
Простите, да, мне пришлось немного изменить свой код для публикации, второй должен быть LocationActivity.this – Robin
Я пытался сделать все requestPermissions в отдельном Activity, но это делает обратный вызов сложным и хакерским. – Robin