2016-11-11 5 views
-1

問題はギャラリーから画像を選択しようとしています。その後、ギャラリーから元の画像を開くと、開いていない(ブラックスクリーンが来る)!アプリケーションからその画像を再度選択しようとしても、は画像をロードできません。ギャラリーから画像を選択するアンドロイドオリジナル画像が外部から開かない

private void openGalleryForImageSelection() 
{ 
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    try 
    { 
     startActivityForResult(intent, IMAGE_FROM_GALLERY); 
    } 
    catch(Throwable e) 
    { 
     Log.e(LOG_TAG,"openGalleryForImageSelection failed",e); 
     Toast.makeText(this,getResources().getString(R.string.image_error),Toast.LENGTH_SHORT).show(); 
    } 
} 

この問題を解決する方法を教えてください。ありがとうございました。

+0

あなたは 'onActivityResult()'メソッドの中でイメージパスを正しく取得していますか? –

+0

ご回答いただきありがとうございます。私はイメージパスを正しく取得しています。最初に開く画像です。しかし、再び同じ画像を再び選択しようとすると、それは開いていません!同じ画像を外側から開こうとしたとしても、それは空白の画像を与えています! –

答えて

0

まず、これらの許可をメディファーストに追加してください。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

ここで、どこでもshowFileChooser()関数を呼び出します。

private void showFileChooser() { 
     Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
     intent.setType("image/*"); 
     intent.addCategory(Intent.CATEGORY_OPENABLE); 
     try { 
      startActivityForResult(
        Intent.createChooser(intent, "Select a Image to Upload"), 
        1); 
     } catch (android.content.ActivityNotFoundException ex) { 
      Toast.makeText(getApplicationContext(), "Please install a Photo Viewer.", 
        Toast.LENGTH_SHORT).show(); 
     } 

    } 
@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     if (requestCode == 1) { 
      if (resultCode == Activity.RESULT_OK) { 

      } 
     } 
} 
0
にご openGalleryForImageSelection()方法を変更

:次に、あなたがこのようなgetPathForImage()を呼び出すことによって、その中に実際のパスを取得し、その後、onActivityResult()内部の意思データを取得します

public void openGalleryForImageSelection(View view) { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), IMAGE_FROM_GALLERY); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == 1) { 
     if (resultCode == Activity.RESULT_OK) { 
     realPath = getPathForImage(ProfileActivity.this, data.getData()); 
     } 
    } 
} 


public static String getPathForImage(Context context, Uri uri) 
{ 
    String result = null; 
    Cursor cursor = null; 

    try { 
     String[] proj = { MediaStore.Images.Media.DATA }; 
     cursor = context.getContentResolver().query(uri, proj, null, null, null); 
     if (cursor == null) { 
      result = uri.getPath(); 
     } else { 
      cursor.moveToFirst(); 
      int column_index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
      result = cursor.getString(column_index); 
      cursor.close(); 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally { 
     if (cursor != null) { 
      cursor.close(); 
     } 
    } 
    return result; 
} 

そしてrealPathを使用してonActivityResultに変換してBitmapに変換し、それをBitmapにロードしてくださいあなたの中にあなたのImageView これを行う方法です。それがあなたを助けることを願っています

+0

同じコードを試しましたが、null値を返すgetPathForImageメソッドが試されました! –

+0

画像を開くとき、 'Recent'から画像を選択せず​​、' Gallery'フォルダから画像を選択し、それが動作しているかどうか教えてください。 –

関連する問題