Можно ли поделиться файлом с Intent.ACTION_SEND, получить и сохранить выбор пользователя?
Я хотел бы позволить пользователю поделиться файлом, скажем, с Intent.ACTION_SEND
затем сохраните выбор пользователя и адрес / номер телефона, чтобы иметь возможность автоматически отправлять другой файл в одно и то же место назначения в другое время. Это возможно и как? Спасибо
1 ответ
Вы можете поделиться своим файлом в виде двоичных данных, как описано ниже.
Ссылочная ссылка со страницы разработчика Android: https://developer.android.com/training/sharing/send.html
Отправить двоичный контент
Двоичные данные передаются с помощью действия ACTION_SEND в сочетании с установкой соответствующего типа MIME и размещением URI для данных в дополнительном файле с именем EXTRA_STREAM. Это обычно используется для обмена изображениями, но может использоваться для обмена любым типом двоичного содержимого:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage);
shareIntent.setType("image/jpeg");
startActivity(Intent.createChooser(shareIntent, getResources().getText(R.string.send_to)));
Обратите внимание на следующее:
Вы можете использовать MIME-тип "/", но это будет соответствовать только тем действиям, которые способны обрабатывать общие потоки данных. Получающему приложению требуется разрешение для доступа к данным, на которые указывает Uri. Рекомендованные способы сделать это: Сохраните данные в вашем собственном ContentProvider, убедившись, что другие приложения имеют правильное разрешение на доступ к вашему провайдеру. Предпочтительным механизмом предоставления доступа является использование разрешений для каждого URI, которые являются временными и предоставляют доступ только к принимающему приложению. Простой способ создать ContentProvider, подобный этому, - использовать вспомогательный класс FileProvider. Используйте систему MediaStore. MediaStore в первую очередь нацелен на MIME-типы видео, аудио и изображений, однако, начиная с Android 3.0 (уровень API 11), он также может хранить не мультимедийные типы (для получения дополнительной информации см. MediaStore.Files). Файлы могут быть вставлены в MediaStore с помощью scanFile(), после чего URI content://, подходящий для совместного использования, передается в предоставленный обратный вызов onScanCompleted(). Обратите внимание, что после добавления в систему MediaStore содержимое доступно любому приложению на устройстве.
Просто измените последнюю строку в приведенном выше коде, чтобы он не отображался каждый раз. Он сохранит выбор по умолчанию при последующем запуске вашего приложения.
startActivity(shareIntent);
Относительно "затем сохраните выбор пользователя и адрес / номер телефона, чтобы иметь возможность автоматически отправлять другой файл в то же место назначения"
Выбор пользователя для отправки вашего файла в конкретное приложение будет сохранен с использованием приведенного выше кода. Но я не думаю, что вы можете хранить конкретный номер / адрес из другого приложения в вашем приложении для последующей отправки файлов. Когда ваше намерение переходит к другому действию (приложению), оно не может контролироваться из вашего предыдущего действия (приложения). Каждый раз вы должны выбрать этот конкретный адрес / номер во втором приложении.