Как исправить ошибки в отображаемом содержимом при открытии файла с помощью намерения? - PullRequest
0 голосов
/ 16 апреля 2019

Я хочу программно показать файл, используя намерение, другому приложению, например, pdf-viewer.Но ни одно приложение не может разрешить содержимое файла и показать сообщение об ошибке или немедленно закрывается.Я думаю, что мое приложение не будет отправлять содержимое файла правильно, так что другие приложения не могут показать файл.

Я искал решение, но нашел только комментарии и сообщения, где проблема заключается в открытиифайл.Но это не моя проблема.

Здесь мой код (не совсем мой, я получил его с другого сайта), чтобы открыть файл:

        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");

Также нет проблем.

Так где же ошибка, или кто-нибудь лучше код или можетопубликовать ссылку на хороший блог / переполнение стека или еще, связанные с моей темой?Спасибо заранее!

1 Ответ

1 голос
/ 16 апреля 2019

Я использую этот код для обмена изображениями, надеюсь, это поможет:

    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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...