Android Java FileProvider между двумя моими приложениями - PullRequest
0 голосов
/ 23 сентября 2019

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

Я собираюсь использоватьFileProvider, позволяющий одному приложению получить доступ к файлу, хранящемуся во внутреннем хранилище другого приложения.Я считаю, что мой код правильно реализует FileProvider в Application1, но я не знаю, как заставить приложение 2 запросить файл и получить его из Application1.

Вот Application1, где filename - это имя файла.

            final Uri data = FileProvider.getUriForFile(this, "com.csec467.lab3b.fileprovider", new File(filename));
            this.grantUriPermission(this.getPackageName(), data, Intent.FLAG_GRANT_READ_URI_PERMISSION);
            final Intent intent = new Intent(Intent.ACTION_SEND)
                    .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
            intent.setData(data);
            intent.setPackage("com.csec467.lab3c");
            this.startActivity(intent);

Тогда мой провайдер в манифесте.

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

Но как мне получить application2 длячитать файл с помощью провайдера?Это мой текущий код, но он говорит, что файл не найден.

File file = new File(filename);

        final Uri uri = FileProvider.getUriForFile(this, "com.csec467.lab3b.fileprovider", new File(filename));
        try {
            FileInputStream fIn = new FileInputStream(new File(uri.toString()));
            InputStreamReader InputRead = new InputStreamReader(fIn);
            int charRead;
            String s = "";
            char[] inputBuffer = new char[800];
            while ((charRead = InputRead.read(inputBuffer)) > 0) {
                String readstring = String.copyValueOf(inputBuffer, 0, charRead);
                s += readstring;
            }
            InputRead.close();
            try {
                Toast.makeText(this, s, Toast.LENGTH_LONG).show();
            } catch (Exception e){

            }
        } catch (Exception e){
            System.out.println(e);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...