私はこの問題を解決していないいくつかの解決策を見つけました。
私のために働いた解決策はここにあります。 1つは、共有または非プライベートの場所に画像を保存する必要があるということです(http://developer.android.com/guide/topics/data/data-storage.html#InternalCache)
Apps
の「プライベート」キャッシュの場所に保存すると多くの提案がありますが、もちろんこれには他の外部アプリケーションからアクセスできません利用されている一般的な共有ファイルのインテント。これを試してみると、実行されますが、例えばdropboxはそのファイルが利用できなくなったことを伝えます。
/*ステップ1 - 以下のファイル保存機能を使用してビットマップファイルをローカルに保存します。 */
localAbsoluteFilePath = saveImageLocally(bitmapImage);
/* STEP 2 - 共有ファイルの意図に非プライベートの絶対ファイルパスを共有する*/
if (localAbsoluteFilePath!=null && localAbsoluteFilePath!="") {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
Uri phototUri = Uri.parse(localAbsoluteFilePath);
File file = new File(phototUri.getPath());
Log.d("file path: " +file.getPath(), TAG);
if(file.exists()) {
// file create success
} else {
// file create fail
}
shareIntent.setData(phototUri);
shareIntent.setType("image/png");
shareIntent.putExtra(Intent.EXTRA_STREAM, phototUri);
activity.startActivityForResult(Intent.createChooser(shareIntent, "Share Via"), Navigator.REQUEST_SHARE_ACTION);
}
/* SAVEのイメージ関数*/
private String saveImageLocally(Bitmap _bitmap) {
File outputDir = Utils.getAlbumStorageDir(Environment.DIRECTORY_DOWNLOADS);
File outputFile = null;
try {
outputFile = File.createTempFile("tmp", ".png", outputDir);
} catch (IOException e1) {
// handle exception
}
try {
FileOutputStream out = new FileOutputStream(outputFile);
_bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
} catch (Exception e) {
// handle exception
}
return outputFile.getAbsolutePath();
}
/* STEP 3 - 共有ファイルの意図の結果を処理します。私はそれが誰かを役に立てば幸い*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// deal with this with whatever constant you use. i have a navigator object to handle my navigation so it also holds all mys constants for intents
if (requestCode== Navigator.REQUEST_SHARE_ACTION) {
// delete temp file
File file = new File (localAbsoluteFilePath);
file.delete();
Toaster toast = new Toaster(activity);
toast.popBurntToast("Successfully shared");
}
}
/* UTILS */
public class Utils {
//...
public static File getAlbumStorageDir(String albumName) {
// Get the directory for the user's public pictures directory.
File file =
new File(Environment.getExternalStorageDirectory(), albumName);
if (!file.mkdirs()) {
Log.e(TAG, "Directory not created");
}
return file;
}
//...
}
などへのリモートの一時ファイルが必要です。
1つの質問に対して複数の回答を与えることはできないため、新しい質問を別々に行う必要があります。しかし、とにかく、Fileには、指定されたフォルダが存在することを確認するために使用できるmkdirs()メソッドがあります。 – AlbeyAmakiir
ああ、ありがとう@AlbeyAmakiir!将来の投稿に注目! – dabious