Я предвосхищу это, сказав, что это часть домашнего задания, которое, как я знаю, обычно не одобряется, но я чувствую, что этот вопрос ранее не задавался.
Я собираюсь использовать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);
}
}