2011-06-26 4 views
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; 
} 

答えて

0

打ち上げの意図:から適応

final Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("image/*"); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
activity.startActivityForResult(intent, requestCode); 

写真の送付を受け入れます。

final InputStream is = context.getContentResolver().openInputStream(intent.getData()); 
final Bitmap imageData = BitmapFactory.decodeStream(is, null, options); 
is.close(); 

この問題は非常に悔しかったので、私はそれを正しく行う方法について記事全体を書きました。または少なくとも最善の方法。

http://androidfragments.blogspot.com/2012/02/loading-bitmaps-from-gallery.html

関連する問題