ユーザーが電話ギャラリーから写真を選択できるアプリを作成しています。SD カードの画像についてはすべて問題なく動作しますが、ユーザーが Picassa から画像を選択すると、アプリケーションがクラッシュします。
ギャラリーを呼び出すコード:
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, SELECT_FROM_GALLERY_ACTION);
画像を受信するためのコード:
Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
File galeryFile = new File(filePath);
FileUtils.copyFile(galeryFile, imageFile);
processImage(imageFile);
エラー:
08-30 14:51:04.268: E/ActivityThread(31379): Failed to find provider info for com.android.gallery3d.provider
08-30 14:51:04.278: E/AndroidRuntime(31379): FATAL EXCEPTION: main
08-30 14:51:04.278: E/AndroidRuntime(31379): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4353, result=-1, data=Intent { dat=content://com.android.gallery3d.provider/picasa/item/5735585761449205042 flg=0x1 }} to activity {com.example.my_gallery_app/com.example.my_gallery_app.MainActivity}: java.lang.NullPointerException
次の行でヌル ポインタが発生します。
cursor.moveToFirst();
この回避策を読みました。しかし、コメントは有望ではありません。ギャラリーがユーザーの Facebook、Picassa、またはその他の写真を表示しないように制限し、SD カードからのみ画像を選択できるようにしたいと考えています。