Ich versuche, ein Bild im Verzeichnis res/raw
meiner App zusammen mit einem Share Intent übergeben.Freigeben einer Datei im Raw-Ordner mit einem FileProvider
Ich folgte dem Prozess in der FileProvider docs beschrieben, und hier ist mein Code:
AndroidManifest.xml
<application ...>
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="com.myapp.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths" />
</provider>
</application>
res/xml/paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="shared" path="./"/>
</paths>
Der Code in meiner Tätigkeit:
String shareToPackage = ...
File imageFile = new File(context.getFilesDir().getPath() + "/image");
if (!imageFile.exists()) { // image isn't in the files dir, copy from the res/raw
final InputStream inputStream = context.getResources().openRawResource(R.raw.my_image);
final FileOutputStream outputStream = context.openFileOutput("image", Context.MODE_PRIVATE);
byte buf[] = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();
imageFile = new File(context.getFilesDir().getPath() + "/image");
}
if (!imageFile.exists()) {
throw new IOException("couldn't find file");
}
final Uri uri = Uri.fromFile(imageFile);
context.grantUriPermission(shareToPackage, uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
final Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
intent.putExtra(Intent.EXTRA_TEXT, "here's the image");
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setPackage(shareToPackage);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(intent);
Die oben nicht als Datei, die ich in der anderen App bekommen funktioniert nicht zugänglich ist:
java.io.FileNotFoundException: FILE_PATH: öffnen, ist fehlgeschlagen: EACCES (Permission denied)
Irgendeine Idee, was ich hier falsch mache?
Danke.
Haben Sie dieses Problem jemals gelöst - vor der genau gleichen ... – brandall
@brandall Nein. Ich habe es aufgegeben, weil zu viel Zeit dafür verschwendet wurde. Wenn Sie eine Lösung finden, beantworten Sie diese bitte hier, damit andere in Zukunft auch nicht viel Zeit verschwenden müssen. VIEL GLÜCK! –
Unglaublich ... 6 Stunden auf der Toilette schon drauf, für etwas das so einfach sein sollte.Wenn ich es löse, werde ich zurück posten ..... – brandall