Android M Permissions: onRequestPermissionsResult() not being called
Android M Разрешения: не вызывается функция onRequestPermissionsResult()
Я обновляю наше приложение для использования новой системы разрешений среды выполнения M. Все работает, за исключением onRequestPermissionsResult (). Мне нужно проверить разрешение при нажатии кнопки и, если оно прошло успешно, отправить текстовое сообщение. Когда я даю разрешение на это, диалоговое окно закрывается, но оно не запускает отправку текста, пока я снова не нажму кнопку.
Я отладил и установил точки останова в методе onRequestPermissionsResult (), но он никогда не включается в него.
if (requestCode == PERMISSIONS_CODE) { for (inti=0; i < permissions.length; i++) { Stringpermission= permissions[i]; intgrantResult= grantResults[i];
if (permission.equals(Manifest.permission.SEND_SMS)) { if (grantResult == PackageManager.PERMISSION_GRANTED) { onPPSButtonPress(); } else { requestPermissions(newString[]{Manifest.permission.SEND_SMS}, PERMISSIONS_CODE); } } } } }
Кто-нибудь сталкивался с подобной проблемой? Буду признателен за любую помощь в этом. Спасибо
Переведено автоматически
Ответ 1
Я столкнулся с такой же проблемой и только что нашел решение. При использовании библиотеки поддержки вы должны использовать правильные вызовы методов. Например:
При использовании AppCompatActivity следует использовать ActivityCompat.requestPermissions;
Когда в android.support.v4.app.Fragment вы должны использовать просто requestPermissions (это метод экземпляра android.support.v4.app.Fragment)
Если вы вызываете ActivityCompat.requestPermissions во фрагменте, обратный вызов onRequestPermissionsResult вызывается для действия, а не для фрагмента.
Если вы вызываете этот код из фрагмента, у него есть собственный метод requestPermissions. Я полагаю, проблема в том, что вы вызываете статический метод.
Профессиональный совет, если вы хотите, чтобы onRequestPermissionsResult() во фрагменте: FragmentCompat.requestPermissions(Fragment fragment, String[] permissions, int requestCode)
Я тоже столкнулся с этой проблемой. Если вы хотите, чтобы действие, обрабатывающее разрешения, отсутствовало в истории / недавних событиях, тогда у вас возникнет соблазн изменить свою AndroidManifest.xml запись.
Если вы задаете вызываемое действие requestPermissions или AppCompatActivity.requestPermissions с помощью
в вашем AndroidManifest.xml then onRequestPermissionsResult() не будет вызываться. Это верно, если ваше действие является производным от Activity или AppCompatActivity.
Это можно исправить, удалив оба флага из 'AndroidManifest.xml' и завершив действие с помощью finishAndRemoveTask() вместо этого.