#android #file #android-intent
#Android #файл #android-намерение
Вопрос:
Я хочу программно отобразить файл, используя intent, в другом приложении, например, в программе просмотра pdf. Но ни одно приложение не может разрешить содержимое файла и показать сообщение об ошибке или немедленно закрыть. Я думаю, что мое приложение не будет правильно отправлять содержимое файла, поэтому другие приложения не могут отобразить файл.
Я искал решение, но нашел только комментарии и сообщения, где проблема заключается в открытии файла. Но это не моя проблема.
Вот мой код (на самом деле не мой, я получил его с другого сайта), чтобы открыть файл:
MimeTypeMap myMime = MimeTypeMap.getSingleton();
Intent intent = new Intent(Intent.ACTION_VIEW);
String mimeType = myMime.getMimeTypeFromExtension(filetype);
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Uri fileURI = FileProvider.getUriForFile(getContext(),
BuildConfig.APPLICATION_ID ".fileprovider",file);
intent.setDataAndType(fileURI, mimeType);
} else {
intent.setDataAndType(Uri.fromFile(file), mimeType);
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
getContext().startActivity(intent);
}catch (ActivityNotFoundException e){
Toast.makeText(getContext(), "No Application found to open this type of file.", Toast.LENGTH_LONG).show();
}
String-var ‘filetype’ — это расширение / тип файла, например, «pdf» или «txt», и получение правильного mimetype не является проблемой.
Файловый объект «file» — это мой файл, который я создал таким образом:
File openFile = new File("MY_PATH");
Проблем также нет.
Итак, где ошибка, или у кого-нибудь есть код получше, или вы могли бы опубликовать ссылку на хороший блог / stack-overflow-post или что-то еще, связанное с моей темой? Спасибо заранее!
Комментарии:
1. вы добавили своего поставщика контента в манифест?
2. Да, я это сделал. И [BuildConfig. APPLICATION_ID «.fileprovider»] правильно.
Ответ №1:
Я использую этот код для обмена изображениями, надеюсь, это поможет:
private const val IMAGE_FORMAT = "image/jpg"
override fun shareFile(file: File) {
if (context != null) {
val contentUri = FileProvider.getUriForFile(context!!, FileManager.PROVIDER, file)
val intent = Intent(Intent.ACTION_SEND)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
intent.type = IMAGE_FORMAT
intent.putExtra(Intent.EXTRA_STREAM, contentUri)
startActivity(Intent.createChooser(intent, getString(R.string.share_via)))
}
}
FileManager.PROVIDER
в вашем случае это строка поставщика BuildConfig.APPLICATION_ID ".fileprovider"
Комментарии:
1. Спасибо за ваш ответ. Я попробую этот код и дам вам отзыв, работает ли он: D
2. Я пытался, но безуспешно. Возможно ли, что я создаю файловый объект неправильно??