1
私はこれらの2つのクラスを使用して、ギャラリーから画像をリクエストして取得しています。このコードはGingerbread以下でうまく動作しますが、XoomのHoneycombでは失敗します。HoneycombでAndroid Gallery 3Dがビットマップを返さない
私は空白のファイルを書きますが、ギャラリーはそのファイルに選択した画像を書き込んでいません。さらに、ファイルはWindowsでは表示されません。ファイルを作成するには、DDMSタブに移動する必要があります。それは所有者とグループのためのrwアクセス権を持っていますが、誰もがアクセスできません。写真を取得するRetrieve Picasa Image for Upload from Gallery
public static class GetImage implements IIntentBuilderForResult {
public String TypeFilter = "image/*";
public boolean ForceDefaultHandlers = false;
public Bitmap.CompressFormat CompressFormat = Bitmap.CompressFormat.PNG;
private Intent intent = null;
private String TemporaryImagePath = null;
public void prepareIntent(Context context) {
try {
File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
dir.mkdirs();
File tempFile = new File(dir, "galleryresult-temp.png");
//.createTempFile("GalleryResult", ".png");
TemporaryImagePath = tempFile.getAbsolutePath();
tempFile.getParentFile().mkdirs();
tempFile.createNewFile();
Logger.d("IsFile= " + tempFile.isFile());
tempFile.setWritable(true, false);
tempFile.setReadable(true, false);
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(TypeFilter);
if (ForceDefaultHandlers) {
intent.addCategory(Intent.CATEGORY_DEFAULT);
}
final Uri uri = Uri.fromFile(tempFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
final String formatName = CompressFormat.name();
intent.putExtra("outputFormat", formatName);
} catch (Exception e) {
}
}
public Intent getIntent() {
return intent;
}
public Bundle getResultBundle() {
Bundle data = new Bundle();
data.putString("transientImagePath", TemporaryImagePath);
return data;
}
}
public abstract static class GetImageResult extends ActivityResultHandlerHelper {
public Bitmap bitmapResult = null;
public void onPrepareResult() {
bitmapResult = null;
Uri imageUri = null;
String filePath = null;
boolean fromTransientPath = false;
String tempFilePath = null;
if(resultBundle != null) {
tempFilePath = resultBundle.getString("transientImagePath");
File tempFile = new File(tempFilePath);
imageUri = Uri.fromFile(tempFile);
}
if(imageUri == null || imageUri.toString().length() == 0) {
imageUri = data.getData();
} else {
fromTransientPath = true;
}
if(imageUri != null) {
if(imageUri.getScheme().equals("file")) {
filePath = imageUri.getPath();
} else if(imageUri.getScheme().equals("content")) {
filePath = findPictureFilePath(context, imageUri);
}
if(filePath != null) {
bitmapResult = BitmapFactory.decodeFile(filePath);
if(fromTransientPath) {
//File delTarget = new File(filePath);
//delTarget.delete();
}
}
}
}
}
public static final String findPictureFilePath(Context context, Uri dataUri) {
String filePath = null;
final String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = null;
try {
cursor = context.getContentResolver().query(dataUri, projection,
null, null, null);
int data_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
filePath = cursor.getString(data_index);
}
} finally {
if (cursor != null) {
cursor.close();
}
}
return filePath;
}