新しい Storage Access Framework を画像のコンテンツ ピッカーとして使用して、結果のファイルをビットマップとして取得するにはどうすればよいですか? コンテンツが電話にローカルな場合、これは以下のコードに示すように簡単に実行できます。ただし、コンテンツが picasa や google ドライブまたはボックスなどの場所からのものである場合、BitmapFactory.decodeStream(InputStream) は常に false を返すため、コンテンツにアクセスできません。解決策はありますか?
// launch the new UI picker
Intent docsIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
docsIntent.addCategory(Intent.CATEGORY_OPENABLE);
docsIntent.setType("image/*");
startActivityForResult(docsIntent, 556);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri uri = data.getData();
// removed threading logic for easy of reading
ParcelFileDescriptor pfd = getContentResolver().openFileDescriptor(uri, "r");
FileDescriptor fd = pfd.getFileDescriptor();
Bitmap bm = BitmapFactory.decodeFileDescriptor(fd); // null for picasa
pfd.close();
InputStream is = getContentResolver().openInputStream(uri);
Bitmap bm2 = BitmapFactory.decodeStream(is); // null for picasa
// nothing in the cursor that would point to a url to get the document.
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null) {
String[] names = c.getColumnNames();
while (c.moveToNext()) {
int columnCount = c.getColumnCount();
int i =0;
while (i<columnCount) {
String value = c.getString(i);
String columnName = c.getColumnName(i);
Log.d("Junk", columnName + " : " + value);
i++;
}
}
}
}