#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.