Намерение просмотра действия не может открыть изображение в каталоге файлов с помощью fileProvider - PullRequest
0 голосов
/ 16 июня 2020

Что это такое? У меня есть изображение в каталоге файлов моего приложения. И затем я хочу открыть его с намерением, представлением действия. следующий код:

private void changeInputFileViewer(File file){
    boolean noApp = false;

    file = new File(getFilesDir()+"/test.png");

    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(FileProvider.getUriForFile(getApplicationContext(), "com.example.mayzom", file), "image/png");
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        startActivity(intent);
    } catch ( ActivityNotFoundException e) {
        e.printStackTrace();
        noApp = true;
    }
    if (noApp){
        Toast.makeText(this, getString(R.string.noApp), Toast.LENGTH_SHORT).show();
    }
}

Манифест:

<provider
        android:name="androidx.core.content.FileProvider"
        android:grantUriPermissions="true"
        android:authorities="com.example.mayzom"
        android:exported="false">
        <meta-data
            android:name="android.support.FILE_PROVIDER_PATHS"
            android:resource="@xml/provider_paths"/>
    </provider>

Пути к поставщику: <?xml version="1.0" encoding="utf-8"?> <paths> <files-path name="files" path="."/> </paths>

Образ существует со следующим путем, найденным в проводнике файлов устройства: / data / data / com.example.mayzom / files / test.png .

enter image description here

изображение открывается как бесконечный буфер со следующей информацией: enter image description here

Я поискал в Интернете исправление предыдущей ошибки и, таким образом, у меня есть следующий код в моем onCreate: StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); StrictMode.setVmPolicy(builder.build());

1 Ответ

0 голосов
/ 16 июня 2020

Может быть, чтобы добавить более интересный ответ, чем тот, который есть в комментариях.

Вам нужно создать fileProvider. Вы можете найти руководство здесь , после этого вам понадобится следующий код для вашего намерения

boolean noApp = false;

    try {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(FileProvider.getUriForFile(getApplicationContext(), getPackageName()+".provider", file), "application/pdf");
        intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        startActivity(intent);
    } catch ( ActivityNotFoundException e) {
        e.printStackTrace();
        noApp = true;
    }
    if (noApp){
        Toast.makeText(this, getString(R.string.noApp), Toast.LENGTH_SHORT).show();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...