Согласно этой документации от Google о запуске активности для получения результата :
Хотя базовые API startActivityForResult () и onActivityResult () доступны в классе Activity на всех уровнях API настоятельно рекомендуется использовать API результатов деятельности, представленные в AndroidX Activity 1.2.0-alpha02 и Fragment 1.3.0-alpha02.
Я хочу, чтобы мои пользователи могли делать фотографии из моего приложения и вернуть данные фотографии в мое приложение. Я собирался использовать старый startActivityForResult (), но этот новый метод, похоже, решит множество проблем и будет более надежным, поэтому я хотел попробовать. Я должен иметь возможность позвонить по номеру registerForActivityResult()
и передать ему встроенный контракт на создание фотографии под названием ActivityResultsContracts.TakePicture :
this.registerForActivityResult(new ActivityResultContracts.TakePicture(), ...);
Но я получаю: error: package ActivityResultContracts does not exist
Я добавил это в свой app / build.gradle:
// original include
//implementation 'androidx.appcompat:appcompat:1.1.0'
// suggestion from Google documentation
//implementation 'androidx.appcompat:appcompat:1.2.0-alpha02'
// AndroidStudio suggested a newer version was available
implementation 'androidx.appcompat:appcompat:1.2.0-beta01'
Я пробовал alpha02
и beta01
, и ни один из них, похоже, не имеет указанных классов в документации.
Когда я пытаюсь вручную импортировать класс в начало моего файла java, AndroidStudio также не думает, что пакет существует. Это должно быть androidx.activity.result.contract.ActivityResultContracts.TakePicture
, но вот что я вижу:
Я использую gradle 3.5.3, если это вообще имеет значение. (Каждый раз, когда я пытаюсь перейти на последнюю версию Gradle, мой проект сходит с ума, поэтому я просто остановился на той версии, которая работает.)