Отправка изображения в приложение Google+ с помощью Intent.ACTION_SEND и Intent.EXTRA_STREAM

Мое приложение генерирует изображения, которые пользователь может сохранять или делиться с другими . Приведенный ниже код работает для большинства приложений: Messenger, Facebook, Dropbox, электронная почта и т. Д. Это означает, что изображение загружается выбранным приложением, и пользователь может успешно поделиться изображением с этим приложением.

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/png");
File o = new File(dir, "file.png");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(o));
startActivity(Intent.createChooser(intent , "Send options")); 

Однако, когда я выбираю Google+ в списке приложений, запускается Google +, но изображение не отображается в окне публикации. Вместо этого google + отображает всплывающее сообщение с текстом:

"You can only post photos stored on your device."

Это немного сбивает с толку, потому что изображение находится на внешней SD-карте, то есть /mnt/sdcard/AppDir/file.png. Я использую последнее обновление приложения Google+ (2.3.1.242969).

Есть ли еще одна хитрость для публикации изображения в Google +?

Спасибо.

ОБНОВЛЕНИЕ:

Мое приложение генерирует изображения, которые используются совместно, поэтому приведенный ниже пример из @ chirag-shah напрямую не применим. Но использование MediaStore кажется правильной идеей. Я остановился на следующем базовом коде:

void shareImage(int position) {
    File f = getFileFor(position);
    ContentValues values = new ContentValues(2);
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
    values.put(MediaStore.Images.Media.DATA, f.getAbsolutePath());
    Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("image/png");
    intent.putExtra(Intent.EXTRA_STREAM, uri);
    startActivity(Intent.createChooser(intent , "Send options")); 
}

Он работает с Google+ и всеми другими приложениями, с которыми я тестировал. Я оставляю вопрос открытым на случай, если это не лучшая практика.Может ли кто-нибудь подтвердить, что это правильный способ сделать это?

19
задан stephen.z 20 February 2012 в 17:36
поделиться