Znalazłem kilka rozwiązań, które nie rozwiązują tego problemu.
Oto rozwiązanie, które sprawdziło się u mnie. Jeden haczyka jest potrzebne do przechowywania obrazów w udostępnionym lub nie app prywatnej lokalizacji (http://developer.android.com/guide/topics/data/data-storage.html#InternalCache)
Wiele sugestii powiedzenia przechowywać w „prywatnej” lokacja Apps
ale to oczywiście nie jest accessable za pośrednictwem innych aplikacji zewnętrznych, w tym ogólny zamiar Share App File, który jest wykorzystywany. Gdy spróbujesz, uruchomi się, ale na przykład dropbox powie Ci, że plik nie jest już dostępny.
/* KROK 1 - Zapisz plik mapy bitowej lokalnie, korzystając z funkcji zapisywania plików poniżej. */
localAbsoluteFilePath = saveImageLocally(bitmapImage);
/* Krok 2 - Podziel non prywatną ścieżkę Absolute pliku do intencji plików akcja */
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);
}
/* zapisz obraz funkcji */
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();
}
/* KROK 3 - Handle Share File Intent result. Trzeba zdalny plik tymczasowy itd. */
@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;
}
//...
}
Mam nadzieję, że ktoś pomoże.
Nowe pytanie należy podać osobno, ponieważ nie można przyznać wielu odpowiedzi na jedno pytanie. W każdym razie plik ma metodę mkdirs(), która może być używana do zapewnienia istnienia określonego folderu. – AlbeyAmakiir
o dzięki, @AlbeyAmakiir! Uwaga dla przyszłych postów! – dabious