Я не получаю обратный вызов результата разрешения api Результата Действия, как упомянуто в do c.
Получение результата от действия
Я использую implementation "androidx.activity:activity-ktx:1.2.0-alpha02"
Вот код API:
/**
* An {@link ActivityResultContract} to {@link Activity#requestPermissions request a permission}
*/
public static class RequestPermission extends ActivityResultContract<String, Boolean> {
@NonNull
@Override
public Intent createIntent(@NonNull String input) {
return new Intent(ACTION_REQUEST_PERMISSIONS)
.putExtra(EXTRA_PERMISSIONS, new String[] { input });
}
@NonNull
@Override
public Boolean parseResult(int resultCode, @Nullable Intent intent) {
if (resultCode != Activity.RESULT_OK) return false;
if (intent == null) return false;
int[] grantResults = intent.getIntArrayExtra(EXTRA_PERMISSION_GRANT_RESULTS);
if (grantResults == null) return false;
return grantResults[0] == PackageManager.PERMISSION_GRANTED;
}
}
Вот моя реализация:
private val permission = prepareCall(object : ActivityResultContracts.RequestPermission() {
override fun createIntent(input: String): Intent {
if (shouldShowRequestPermissionRationale(input)) {
Toast.makeText(
this@MainActivity,
"shouldShowRequestPermissionRationale - true",
Toast.LENGTH_SHORT
).show()
// case 2
} else {
Toast.makeText(
this@MainActivity,
"shouldShowRequestPermissionRationale - false",
Toast.LENGTH_SHORT
).show()
// case 1 and 3
}
return super.createIntent(input)
}
override fun parseResult(resultCode: Int, intent: Intent?): Boolean {
val t = super.parseResult(resultCode, intent)
Toast.makeText(this@MainActivity, "parseResult $t", Toast.LENGTH_SHORT).show()
return t
}
}) {
Log.d("permission granted?", "$it")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
permission(android.Manifest.permission.CAMERA)
}
}
В соответствии с do c, я должен получать обратный вызов внутри ActivityResultCallback
, но после возврата я полагаю, что в моем случае он даже не вызывает функцию ParseResult
. Хотя я все еще получаю обратный вызов внутри onRequestPermissionsResult
функции.
Итак, я делаю что-то не так?
Пожалуйста, обратитесь Получение результата от действия , чтобы понять этот API .
Обновление
Мне удалось получить обратный вызов после расширения моей активности с помощью ComponentActivity
, но снова, если разрешение уже дано, приложение не получит обратный вызов, есть ли способ напрямую обработать здесь? Я не хочу проверять свое разрешение.
Пример демонстрационного кода - https://github.com/tasneembohra/ActivityResultApiDemo