Вот решение, которое сработало для меня. Один момент: вам нужно хранить изображения в общедоступном или не принадлежащем приложению приватном месте (http://developer.android.com/guide/topics/data/data-storage.html#InternalCache)
Многие предложения говорят о том, чтобы хранить в Apps
«частном» месте кэша, но это, конечно, недоступно через другие внешние приложения, включая общее намерение Share File, которое используется. Когда вы попробуете это, он запустится, но, например, dropbox скажет вам, что файл больше не доступен.
/ * ШАГ 1 - Сохранить файл растрового изображения локально, используя функцию сохранения файла ниже. * /
localAbsoluteFilePath = saveImageLocally(bitmapImage);
/ * ШАГ 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(TAG, "file path: " +file.getPath());
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);
}
/ * ФУНКЦИЯ СОХРАНЕНИЯ ИЗОБРАЖЕНИЯ * /
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();
}
/ * ШАГ 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");
}
}
Надеюсь, это кому-нибудь поможет.