(Я читал много подобных вопросов, но терпите меня здесь)
Мне нужно отправить изображение из одного действия (настраиваемая камера), где второе действие — загрузить изображение в веб-альбом Picasa через Google API.
Каждый пример, который я нашел, выглядит примерно так:
File f = new File(cacheDir, "image_name.jpg");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
startActivity(intent);
Это отлично работает, когда я использую стандартную операцию загрузки Android Picasa (или любое другое приложение для обмена). Я также могу загружать фотографии через пример приложения Picasa, которое я использую, когда делюсь изображением из галереи/камеры и т. д.
Но я не могу понять, как создать Intent, который использует uri "content://---" и передать его другому приложению (ни для этого примера приложения, ни для стандартного приложения Picasa)...
В частности: как я могу создать намерение, совместимое с приведенным ниже кодом (т. е. использует «content://» uri вместо «file://» uri)?
static class SendData {
String fileName;
Uri uri;
String contentType;
long contentLength;
SendData(Intent intent, ContentResolver contentResolver) {
Bundle extras = intent.getExtras();
if (extras.containsKey(Intent.EXTRA_STREAM)) {
Uri uri = this.uri = (Uri) extras.get(Intent.EXTRA_STREAM);
String scheme = uri.getScheme();
if (scheme.equals("content")) {
Cursor cursor = contentResolver.query(uri, null, null, null, null);
cursor.moveToFirst();
this.fileName = cursor.getString(cursor.getColumnIndexOrThrow(Images.Media.DISPLAY_NAME));
this.contentType = intent.getType();
this.contentLength = cursor.getLong(cursor.getColumnIndexOrThrow(Images.Media.SIZE));
}
}
}
}
- Извлечение информации о файле из файла uri вручную приводит к исключению NullPointerException с запросом Google Http, используемым в приложении.
Жесткое кодирование Content uri работает. Например:
uploadIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://media/external/images/media/11"));