Я пытаюсь передать загруженное растровое изображение с помощью приложения ShareActionProvider от Android, и у меня возникла проблема с передачей растрового изображения соответствующим приложениям (таким как Messenger, Google+, Gmail). Когда я передаю намерение с помощью uri, ничего не происходит (изображение не заполняется в стороннем приложении).Совместное использование изображения с помощью ShareActionProvider
Вот мое Намерение:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/*");
writeToDirectory(bitmap, "cached-image.png"); // write bitmap to file system in order to share
intent.putExtra(Intent.EXTRA_STREAM, getFileUri("cached-image.png"))
mShareActionProvider.setShareIntent(intent);
Я в настоящее время сохранение растрового изображения в файл с помощью следующего:
public String writeToDirectory(Bitmap bitmap, String filename) {
assert context != null;
assert bitmap != null;
assert filename != null;
// Ensure directory exists and create if not
String path = Environment.getExternalStorageDirectory() + File.separator + "myApp";
File f = new File(path);
boolean dirExists = f.isDirectory();
if (!f.isDirectory() && !f.exists()) {
dirExists = f.mkdirs();
}
if (dirExists) {
File file = new File(sharedPrivateExternalPath, filename);
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
out.close();
} catch (IOException ex) {
e(TAG, "Write failed!");
e(TAG, ex.getMessage());
ex.printStackTrace();
}
return file.toString();
} else {
return "";
}
}
и я извлекая Uri с помощью этого метода
public Uri getFileUri(String filename) {
assert context != null;
assert filename != null;
String path = Environment.getExternalStorageDirectory() + File.separator + "myApp";
File file = new File(path, filename);
return Uri.fromFile(file);
}
Я проверил, что файл записывается в соответствующее место (Uri is file:///storage/emulated/0/myApp/cached-image.png
) и смог просмотреть изображение там (сделал adb pull
с устройства), хотя изображение не прошло. Я не вижу ошибок в журнале (нет FileNotFoundException или что-то в этом роде). Это проблема с разрешением файла? Разве я не могу поделиться с «непубличным» местом?
Если я меняю
getExternalStorageDirectory() + File.separator + "myApp";
на простой
getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
, он отлично работает ... но это беспокоит меня, что это не работает другим способом :).
Любая помощь будет замечательной!
я не получаю эту проблему, вам нужно разделить путь изображения или что? –
Извините, вопрос был немного расплывчатым. Я обновил свой вопрос, но я также нашел свою проблему. – loeschg