Я пытаюсь выбрать изображения с помощью Storage Access Framework и загрузить их на свой сервер.
Проблема, с которой я сталкиваюсь, заключается в том, что после выбора файлов я получаю результат, содержащий дубликаты.
У меня есть 279 фотографий в папке.
ACTION_OPEN_DOCUMENT
возвращает 279 результатов, но некоторые из них являются дубликатами, поэтому иногда я получаю 275 уникальных результатов, иногда 268 и т. Д. Дубликаты отображаются случайным образом, поэтому они не являются определенными файлами.ACTION_OPEN_DOCUMENT с Storage Access Framework возвращает повторяющиеся результаты
Вот код:
int PICKER_CODE = 123;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(Intent.createChooser(intent,
"Select images"), PICKER_CODE);
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK) {
Toast.makeText(this, "Nothing was chosen", Toast.LENGTH_LONG).show();
return;
}
if (requestCode == PICKER_CODE) {
ClipData clipData = data.getClipData();
if (clipData != null) {
Set<Uri> uniqueUris = new HashSet<>();
for (int i = 0; i < clipData.getItemCount(); i++) {
Uri photoUri = clipData.getItemAt(i).getUri();
uniqueUris.add(photoUri);
Log.i("IMAGE PICKER", "photo: " + photoUri);
}
String stats =
"all: " + clipData.getItemCount()
+ ", unique: " + uniqueUris.size();
Log.i("IMAGE PICKER", "stats: " + stats);
Toast.makeText(this, stats, Toast.LENGTH_LONG).show();
TextView textView = (TextView) findViewById(R.id.output_text);
textView.setText(stats);
}
}
}
Полный код деятельности здесь: https://github.com/Leonti/android-saf-duplicates/blob/master/app/src/main/java/com/example/leonti/googledriveduplicatesdebugging/MainActivity.java
Вот образец Android приложения, где вы можете воспроизвести проблему: https://github.com/Leonti/android-saf-duplicates Просто установите его на телефоне, выберите некоторые изображения (тем лучше), и он скажет вам общее количество и количество уникальных записей.
Не имеет значения, если я выбираю фотографии с Google Диска или из фотографий, большую часть времени получаю дубликаты результатов.
Не могу понять, что происходит. Я выполнил тот же код на Android-эмуляторе (использовал другую учетную запись и поделился этой папкой на Google Диске), и он работает как ожидалось - все результаты уникальны.
Я бегу Android 7.0 на Nexus 5X
Спасибо за любую помощь!
Где вы видите дубликаты? В Clipdata или в одном из списков массивов, которые вы делаете? – greenapps
Нет смысла публиковать такой большой список. Мы должны это проверить? Как мы должны это сделать? – greenapps
Я вижу дубликаты как в Clipdata, так и в массиве, который я делаю с момента создания массива из Clipdata @greenapps Я включил список только для справки, никто не должен его проверять. Важная часть состоит в том, что он имеет дубликаты. Но, если кто-то считает, что фактические результаты актуальны, они могут использовать онлайн-инструменты, такие как: http://www.somacon.com/p568.php, чтобы увидеть дубликаты и, возможно, увидеть шаблон. – Leonti