У меня есть фрагмент, в котором у меня есть обзор и настройки реселлера в этом обзоре с использованием адаптера просмотра.
Теперь у меня есть кнопка в списке элементов адаптера, щелкнув по которой мне нужно проверить разрешение READ_EXTERNAL_STORAGE в Android для новой модели разрешений в Android.
Я создал новую функцию во фрагменте этого адаптера, чтобы проверить, предоставлено ли разрешение или нет, и запросить разрешение, если оно еще не предоставлено.
Я передал MyFragment.this в качестве параметра в адаптер и вызывал метод фрагмента по нажатию кнопки в адаптере.
Я использовал приведенный ниже код для вызова requestPermission во фрагменте.
if(ContextCompat.checkSelfPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED){
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
ConstantVariables.READ_EXTERNAL_STORAGE);
}
Я переопределил onRequestPermissionsResult
метод во фрагменте с помощью приведенного ниже кода:
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case ConstantVariables.READ_EXTERNAL_STORAGE:
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, proceed to the normal flow.
startImageUploading();
} else {}
Но он не вызывается, вместо этого вызывается метод onRequestPermissionsResult этого Activity.
Я определил тот же метод onRequestPermissionsResult в родительской активности фрагмента, и он вызывается.
Я не могу удалить метод onRequestPermissionsResult действия, но хочу вызвать метод onRequestPermissionsResult фрагмента, когда я запрашиваю разрешение у фрагмента. Как я могу это сделать? Я делаю что-то здесь не так, пожалуйста, помогите мне, если у кого-нибудь есть идея здесь.
источник
Ответы:
Отредактированный ответ, чтобы охватить более широкие вопросы
Я думаю, что вы путаете метод для фрагмента и активности. Похожая проблема была у моего проекта в прошлом месяце. Пожалуйста, проверьте, если у вас есть наконец следующее:
super.onRequestPermissionsResult
с мероприятияonRequestPermissionsResult
.Посмотрите, поможет ли это.
источник
super.onrequestpermissionresult
в onrequestpermissionresult действия вызывает запрос onrequestpermissionresult фрагмента, когда я запрашиваю разрешение на использованиеrequestpermissions
. Теперь все работает хорошо, большое спасибо .. :)Я запросил разрешение на местоположение от фрагмента, и во фрагменте мне нужно было изменить это:
к этому:
тогда onRequestPermissionsResult был вызван во фрагменте.
источник
Это распространенная ошибка, которую допускают люди при кодировании зефира.
Находясь в AppCompatActivity, вы должны использовать ActivityCompat.requestPermissions; Находясь в android.support.v4.app.Fragment, вы должны просто использовать requestPermissions (это метод экземпляра android.support.v4.app.Fragment). Если вы вызываете ActivityCompat.requestPermissions во фрагменте, вызывается обратный вызов onRequestPermissionsResult. активность, а не фрагмент.
Если вы вызываете этот код из фрагмента, у него есть собственный метод requestPermissions.
Итак, основная концепция такова: если вы находитесь в Деятельности, то позвоните
и если во фрагменте, просто позвоните
Для справки я получил ответ по этой ссылке https://www.coderzheaven.com/2016/10/12/onrequestpermissionsresult-not-called-on-fragments/
источник
Метод
requestPermissions
для фрагментов требует API уровня 23 или выше.Если ваше приложение предназначено для более низкой версии, вы можете использовать
Сначала вам нужно добавить зависимость support-v13:
источник
изменить это:
к этому :
источник
изменить разрешение
источник
Этот принятый ответ не работает для меня, поэтому я нашел свое собственное решение, объясненное ниже:
1. Сначала я создал метод во фрагменте:
2. А затем вызвали его из своей основной деятельности:
И это работает ...
источник
Убедитесь в том, что как
PERMISSION_REQUEST_CODE
в , такonRequestPermissionsResult
и внутри вашейFragment
содержит то же значение.источник
Для tragetSDK 28, проверка SDK (> 23) и запрос разрешения от фрагмента будут работать. ActivityCompat.requestPermissions терпит неудачу (если вы установите код запроса ниже 65536, появится диалоговое окно разрешения, и если пользователь разрешит разрешение, разрешения будут предоставлены, но обратный вызов не произойдет. Но если вы установите значение выше 65536, ActivityCompat.requestPermissions будет немедленно провалиться. Я не знаю причины этой логики. Может быть ошибка или преднамеренное).
Рабочий код:
источник
Если вы работаете с Kotlin, вы должны точно указать, что вы вызываете метод фрагмента, а не активность
Разрешения Android M: onRequestPermissionsResult () не вызывается
Запросить время выполнения у v4.Fragment и сделать обратный вызов во Fragment?
источник
Я была такая же проблема. Ваш фрагмент может быть инициализирован из макета активности. Как это:
main_activty.xml
Эта проблема была решена для меня, когда я использовал
FragmentTransaction
вместоисточник
в API ниже 23 вы можете создать интерфейс в действии, затем реализовать его в дочернем фрагменте, и когда вы получите результат запроса разрешения, действие передаст его реализованному интерфейсу во фрагменте. Это просто :)
источник
Вы можете вызвать метод Fragment ниже
источник
Эта проблема на самом деле была вызвана NestedFragments. В основном большинство фрагментов мы расширяем HostedFragment, который, в свою очередь, расширяет CompatFragment. Наличие этих вложенных фрагментов вызывало проблемы, которые в конечном итоге были решены другим разработчиком проекта.
Он делал некоторые вещи низкого уровня, такие как переключение битов, чтобы заставить это работать, так что я не слишком уверен в фактическом окончательном решении
источник