Android 11 (R) вернуть пустой список при запросе намерения для ACTION_IMAGE_CAPTURE - PullRequest
0 голосов
/ 04 августа 2020

Устройство: Emulator pixel 3a - Android 11

Код:

    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    final List<ResolveInfo> listCam = 
    context.getPackageManager().queryIntentActivities(captureIntent, 0);

При использовании:

targetSdkVersion 30
compileSdkVersion 30

Размер listCam равен 0

и при изменении на:

compileSdkVersion 29

размер listCam равен 1 - как и должно быть.

Используя следующий код:

    val captureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    baseActivity.startActivity(captureIntent)

Работает нормально и показывает приложение камеры.

Есть идеи, почему queryIntentActivities не возвращает намерение камеры?

Спасибо!

1 Ответ

4 голосов
/ 04 августа 2020

Android 11 изменяет способ, которым приложения могут запрашивать и взаимодействовать с другими приложениями.

Из docs :

Методы PackageManager, которые возвращают результаты для других приложений, таких как queryIntentActivities(), фильтруются на основе объявления <queries> вызывающего приложения.

Поэтому вам нужно объявить <queries> в AndroidManifest.xml:

<manifest package="com.example">
    <queries>
        <intent>
            <action android:name="android.media.action.IMAGE_CAPTURE" />
        </intent>
    </queries>
    ...
</manifest>
...