キャッシュディレクトリで画像ファイルを共有しようとしています。完全なパスがありますが、添付ファイルでファイルを送信できません。コードは次のとおりです。
File shareImage=Utils.getBitmapFile();
Log.d("Activity", "get final path in result"+shareImage.getAbsolutePath());
/*MimeTypeMap mime = MimeTypeMap.getSingleton();
String ext=shareImage.getName().substring(shareImage.getName().lastIndexOf(".")+1);
String type = mime.getMimeTypeFromExtension(ext);
shareIntent.setType(type);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("image/*");
Uri shareImageUri = Uri.fromFile(shareImage);
Uri shareImageUri = Uri.fromParts("content", shareImage.getAbsolutePath(), null);//("content://"+shareImage.getAbsolutePath());
*/
Uri shareImageUri = Uri.fromFile(shareImage);
Log.d("Result ","uri is "+shareImageUri.toString());
shareIntent.putExtra(Intent.EXTRA_STREAM, shareImageUri);
startActivity(Intent.createChooser(shareIntent, "Share Results"));
上記のコメントコードが機能していません
送信メールには添付ファイルが表示されますが、受信側には添付ファイルがありません。Facebook共有でも投稿に画像が表示されません
これの理由は何ですか?
私はすでに次のSOリンク how-to-use-share-image-using-sharing-intent-to-share-images-in-Android と他の多くの人、それらのどれも問題を解決することができません
P.S。;
1.目的は、画面のスクリーンショットを撮り、キャッシュディレクトリに保存して、そこからオンラインで共有することです。
2.はい、ファイルはあります。デバイスからDDMSを介してプルし、システムで確認できます。
これの理由は何ですか?
前述のように、他のアプリはアプリの内部ストレージにアクセスできません。
それらのどれも問題を解決することができません
新しいStackOverflowの質問を開いて、完全かつ正確に試した特定の解決策と、発生した特定の問題について説明してください。
しかし、それはSO post !!!
新しいStackOverflowの質問を自由に開いて、完全かつ正確に「機能していないように見える」とはどういう意味かを説明します。
または、 se FileProvider
は、マニフェストのエントリ以外にコードを必要とせずにこの機能を提供します。
または、getExternalCacheDir()
などの外部ストレージに画像を保存します。
@CommonsWareのアドバイスに従い、FileProviderを使用しました。イメージがすでにcache/images/image.png
として内部キャッシュディレクトリにあると仮定すると、次の手順を使用できます。これらは主にドキュメントの統合です。
<manifest>
...
<application>
...
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="com.example.myapp.fileprovider"
Android:grantUriPermissions="true"
Android:exported="false">
<meta-data
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/filepaths" />
</provider>
...
</application>
</manifest>
com.example.myapp
をアプリのパッケージ名に置き換えます。
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
<cache-path name="shared_images" path="images/"/>
</paths>
これは、ファイルを共有する場所をFileProviderに指示します(この場合はキャッシュディレクトリを使用)。
File imagePath = new File(context.getCacheDir(), "images");
File newFile = new File(imagePath, "image.png");
Uri contentUri = FileProvider.getUriForFile(context, "com.example.app.fileprovider", newFile);
if (contentUri != null) {
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); // temp permission for receiving app to read this file
shareIntent.setDataAndType(contentUri, getContentResolver().getType(contentUri));
shareIntent.putExtra(Intent.EXTRA_STREAM, contentUri);
startActivity(Intent.createChooser(shareIntent, "Choose an app"));
}
キャッシュされた画像を次の手順で共有します。
1.キャッシュされた画像をターゲットパスにコピーします。
public static File copyImage(String sourcePath、String targetPath){
試してみてください{
InputStream in = new FileInputStream(sourcePath);
OutputStream out = new FileOutputStream(targetPath);
byte [] buf = new byte [1024];
int len;
while((len = in.read(buf))> 0){
out.write(buf、0、len);
}
in.close();
out.close();
新しいファイル(targetPath);を返します。
} catch(IOException e){
e.printStackTrace();
nullを返します。
}
}
2.コピーファイルのURIを取得します。
Uri uri = Uri.fromFile(target);
3.意図的に画像を共有する
File dir = new File(Constant.INKPIC_PATH);//your custom path,such as /mnt/sdcard/Pictures
if(!dir.exists()){
dir.mkdirs();
}
File f = new File(dir,"temporary_file.jpg");
File target = copyImage(url,f.getAbsolutePath());
Uri uri = Uri.fromFile(target);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
intent.putExtra(Intent.EXTRA_STREAM,uri );
context.startActivity(intent);