Совместное использование файлов Android путем отправки их через другие приложения

#android

#Android

Вопрос:

Я должен обмениваться файлами в своем приложении для Android, отправляя их по электронной почте или любому другому приложению для совместного использования. Я написал код внутри статического класса ViewHolder в классе Adapter, но получаю исключение ниже- введите описание изображения здесь

Для вызова startActivity() из-за пределов контекста действия требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, чего вы хотите?

Я также установил флаг FLAG_ACTIVITY_NEW_TASK в значение intent, но все равно получаю то же исключение.

 private void shareFile(File file) {

Intent intentShareFile = new Intent(Intent.ACTION_SEND);
            intentShareFile.setType(URLConnection.guessContentTypeFromName(file.getName()));
            Uri fileUri = FileProvider.getUriForFile(activity, BuildConfig.APPLICATION_ID   ".provider", file);

            intentShareFile.putExtra(Intent.EXTRA_STREAM, fileUri);

            intentShareFile.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intentShareFile.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            activity.startActivity(Intent.createChooser(intentShareFile, "Send to"));
}
  

Комментарии:

1. Сделайте context быть Activity и избавиться getApplicationContext() . Также имейте в виду, что вы столкнетесь с FileUriExposedException — пожалуйста, используйте FileProvider , а не Uri.parse() , для создания Uri . Вам также нужно будет добавить Intent.FLAG_GRANT_READ_URI_PERMISSION , чтобы разрешить другому приложению использовать ваш Uri . Смотрите документацию .

2. Привет @CommonsWare, с вашим решением исключение устранено, но вместо отображения приложений оно показывает, что никакие приложения не могут выполнить это действие. Я добавил измененный код и снимок экрана в edit.

3. Теперь вам это не нужно FLAG_ACTIVITY_NEW_TASK . Помимо этого, вы должны проверить Logcat или иным образом определить, что вы устанавливаете для типа MIME.