Здравствуйте, я все еще довольно новичок в этом, поэтому, пожалуйста, помогите мне понять, почему у меня появляется эта ошибка.Я перепробовал много решений, поэтому я просто перечислю все, что я сделал, так как не могу понять, почему это происходит.
Я создал проект, который интегрирует GoogleMaps при минимальной SDK 21 доtarget / compile at SDK 28. Я назвал разрешения, необходимые внутри Manifesto.
Я создал файл, который расширяет класс MapFragment, и все, кажется, работает нормально.Я могу проверить и запросить разрешение для местоположения пользователя (окно действительно отображается), но когда я вызвал метод onRequestPermissionResult, он отображается по-другому и выдает сообщение об ошибке « error: не удается найти класс символов NonNull * 1006»* ":
@Override
public void onRequestPermissionsResult(int requestCode, @androidx.annotation.NonNull String[] permissions, @androidx.annotation.NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
В других моих классах Fragment (android.support.v4.app) класс @ androidx.annotation.NonNull вместо этого равен @NonNull.Сначала я подумал, что, может быть, мне нужно добавить реализацию 'com.android.support:support-annotations:28.0.0' в build.gradle, но это не так.Затем я попытался просто заменить @ androidx.annotation.NonNull на @NonNull, что позволило устранить ошибку, но всякий раз, когда я нажимал, разрешать или отрицать, это не ударяло по методу onRequestPermissionResult.
Я создал метод, которыйпроверяет разрешение, но оно не позволяет мне использовать requestPermission самостоятельно, не проверяя, является ли сборка больше или равна SDK 23, но мой минимальный SDK равен 21. Поэтому вместо этого я просто проверил, является ли сборка больше или равна21 и использовал ActivityCompat, чтобы получить метод requestPermission, и он работает.Он будет проверять и запрашивать разрешение, поэтому я думаю, что, возможно, onRequestPermissionResult работает только в MainActivity, чего я не хочу.Я хочу иметь возможность вызывать метод после проверки, был ли удовлетворен запрос внутри MapFragment.Это потому, что MapFragment не поддерживается с android.support.v4.app?Это выглядит так:
private boolean checkAskPermission(int requestCode, String permissionString){
if(Build.VERSION.SDK_INT >= 21){
int permission = ContextCompat.checkSelfPermission(mContext, permissionString);
if(permission!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(getActivity(), new String[]{permissionString}, requestCode);
return false;
}
}
return true;
}
На данный момент я не знаю, что еще попробовать.Я подумал, что, возможно, я неправильно проверял разрешение внутри onRequestPermissionResult, когда я изменяю @ androidx.annotation.NonNull на @NonNull, чтобы иметь возможность использовать его, но метод не срабатывает, когда я использую перерыв в нем.
Пожалуйста, оставьте подробные ответы, чтобы я мог полностью понять мою проблему.Я застрял на этом в течение дня.
Редактировать: Решение
private boolean checkAskPermission(int requestCode, String permissionString){
if(Build.VERSION.SDK_INT >= 23){
int permission = ContextCompat.checkSelfPermission(mContext, permissionString);
if(permission!=PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{permissionString}, requestCode);
return false;
}
}
return true;
}
и просто изменил @ androidx.annotation.NonNull на @NonNull и теперь этопопадает в метод.
Спасибо Евгению за очистку разрешений SDK.Только SDK 23 и выше требуют разрешения.