Средство выбора фотографий с разрешением READ_MEDIA_VISUAL_USER_SELECTED на Android 14 по-прежнему отображает весь медиаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Средство выбора фотографий с разрешением READ_MEDIA_VISUAL_USER_SELECTED на Android 14 по-прежнему отображает весь медиа

Сообщение Anonymous »

В версии Android 14 появилось новое разрешение:
  • READ_MEDIA_VISUAL_USER_SELECTED: READ_MEDIA_VISUAL_USER_SELECTED > предоставлено разрешение, предоставляющее частичный и временный доступ к фотографиям и видео пользователя.
Это новое разрешение имеет новое диалоговое окно со следующими параметрами:

p>
  • Выбор фотографий и видео: новинка в Android 14. Пользователь выбирает конкретные фотографии и видео, которые он хочет сделать доступными для вашего приложения. .
  • Разрешить все: пользователь предоставляет полный доступ к библиотеке ко всем фотографиям и видео на устройстве.
  • < strong>Не разрешать: пользователь запрещает любой доступ.
https://developer.android.com/about/versions/ 14/changes/partial-photo-video-access
  • В документе есть примечание, в котором упоминается:
Примечание. Если ваше приложение уже использует средство выбора фотографий, вам не нужно предпринимать никаких действий для поддержки этого изменения. В противном случае рассмотрите возможность использования средства выбора фотографий вместо принятия этого изменения.

Когда я пытаюсь реализовать средство выбора фотографий и протестировать свое приложение.
Шаг 1. Запрос разрешения: «READ_MEDIA_IMAGES», «READ_MEDIA_VISUAL_USER_SELECTED»
Шаг 2. Я выбираю «< strong>Выбрать фотографии и видео"
Шаг 3. Выберите несколько фотографий -> Разрешить
Результат: PhotoPicker по-прежнему отображает все медиаконтент на устройстве, а не только отображение медиаконтента, которому было предоставлено разрешение.
Я неправильно понимаю или это проблема с моим кодом?
Если я не правильно понял, каково реальное поведение? Что мне с этим делать?
Всем, пожалуйста, дайте мне знать. Спасибо.
Я применил средство выбора фотографий в двух случаях и получил одинаковые результаты. Вот мой код:
Случай 1 использует намерение:

Код: Выделить всё

public class MainActivity extends AppCompatActivity {

ImageView imageView;
Button takePictureButton;
int RESULT_CODE = 0;
int REQUEST_CODE = 1;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView = findViewById(R.id.img);
takePictureButton = findViewById(R.id.btn_take_picture);

takePictureButton.setOnClickListener(view -> {
if (android.os.Build.VERSION.SDK_INT == 34) {
int result14 = this.checkSelfPermission(READ_MEDIA_VISUAL_USER_SELECTED);
boolean hasReadMediaPermissionAndroid14 = PackageManager.PERMISSION_GRANTED == result14;

if (hasReadMediaPermissionAndroid14) {
Intent intent = new Intent(MediaStore.ACTION_PICK_IMAGES);
intent.setType("image/*");
startActivityForResult(intent, RESULT_CODE);
} else {
requestPermissions(new String[] {READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED}, REQUEST_CODE);
}
}
});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
imageView.setImageURI(data.getData());
}
}
}
Случай 2 соответствует инструкциям в документации «Выбор фотографий»:

Код: Выделить всё

public class MainActivity extends AppCompatActivity {
ImageView imageView;
Button takePictureButton;
int REQUEST_CODE = 1;

ActivityResultLauncher pickMedia =
registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), uri -> {
if (uri != null) {
imageView.setImageURI(uri);
Log.d("PhotoPicker", "Selected URI: " + uri);
} else {
Log.d("PhotoPicker", "No media selected");
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

imageView = findViewById(R.id.img);
takePictureButton = findViewById(R.id.btn_take_picture);

takePictureButton.setOnClickListener(view -> {
if (android.os.Build.VERSION.SDK_INT == 34) {
int result14 = this.checkSelfPermission(READ_MEDIA_VISUAL_USER_SELECTED);
boolean hasReadMediaPermissionAndroid14 = PackageManager.PERMISSION_GRANTED == result14;

if (hasReadMediaPermissionAndroid14) {
pickMedia.launch(new PickVisualMediaRequest.Builder()
.setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE)
.build());
} else {
requestPermissions(new String[]{READ_MEDIA_IMAGES, READ_MEDIA_VISUAL_USER_SELECTED}, REQUEST_CODE);
}
}
}
);
}
  • AndroidManifest.xml:
  • activity_main.xml:
  • доказательства: доказательства


Подробнее здесь: https://stackoverflow.com/questions/771 ... d-14-still
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»