2012-04-23 25 views
14

मैं एक छवि ले के लिए एक अनुरोध शुरू कर रहा हूँ: onActivityResult में बाहर वापसएंड्रॉयड - छवि पिकर, गलत छवि

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, "Choose"), PHOTO_GALLERY); 

और हो रही डेटा:

if(resultCode == Activity.RESULT_OK && requestCode == PHOTO_GALLERY) 
{ 
    U.log(data.getData()); 
    Bitmap bm = ... // built from the getData() Uri 
    this.postImagePreview.setImageBitmap(bm); 
} 

जब मैं आशय का शुभारंभ, मैं कुछ फ़ोल्डर्स देखें, जैसे sdcard, Drop Box, MyCameraApp, और इसी तरह।

यदि मैंने पूर्वावलोकन लोड किया है, तो मैंने sdcard से एक तस्वीर चुना है, यह पूरी तरह से गलत छवि है। अन्य फ़ोल्डर्स मुझे यह समस्या नहीं दे रहे हैं।

क्या किसी को पता है कि यह मुझे एक छवि क्यों चुनने देगा, फिर मुझे उरी को दूसरे के लिए दें?

संपादित करें: यहाँ कुछ लॉग इन exampled रहे getData() रों:

अच्छा:

content://com.google.android.gallery3d.provider/picasa/item/5668377679792530210

बुरा:

content://media/external/images/media/28

संपादित करें: मैं एसटीआई गैलरी के sdcard फ़ोल्डर से चुनते समय, समस्याएं हो रही हैं।

// cursor 
Uri selectedImage = data.getData(); 

String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

Cursor cursor = mContext.getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
cursor.moveToFirst(); 

int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
String filePath = cursor.getString(columnIndex); 
cursor.close(); 

// Cursor: /mnt/sdcard/Pic.jpg : /mnt/sdcard/Pic.jpg 
U.log("Cursor: " + filePath + " : " + Uri.parse(filePath)); 

// "regular" 

// Regular: content://media/external/images/media/28 : content://media/external/images/media/28 
U.log("Regular: " + data.getDataString() + " : " + Uri.parse(data.getDataString())); 

// Regular 2: content://media/external/images/media/28 : content://media/external/images/media/28 
U.log("Regular 2: " + data.getData() + " : " + data.getData()); 


mPostImagePreview.setImageBitmap(BitmapFactory.decodeFile(filePath)); 
mPostImagePreview.setVisibility(View.VISIBLE); 

वे अभी भी गलत छवि सेट:

यहाँ मैं onActivityResult में क्या कर रहा का एक सा अधिक विस्तार है। मैं अगर मैं गैलरी में दबाए रखें छवि में जाते हैं, और उसके विवरण देखने:

TItle: Pic 
Time: May 2, 2012 
Width: 720 
Height: 1280 
Orientation: 0 
File size: 757KB 
Maker: Abso Camera 
Model: Inspire 4G 
Path: /mnt/sdcard/Pic.jpg 

तो, गैलरी मुझे पथ कह रहा है ले कार्रवाई के रूप में ही है, और गैलरी इसे सही ढंग से प्रदर्शित हो रहा है । तो अगर मैं इसे एक्टिविटी रिसेट से सेट करता हूं तो पृथ्वी पर क्यों प्रतिपादन नहीं किया जा रहा है?

private void selectPhoto() 
{ 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    ((Activity)mContext).startActivityForResult(Intent.createChooser(intent, "Select Picture"), PHOTO_GALLERY); 
} 
+0

क्या यह व्यवहार यादृच्छिक है? मेरा मतलब है, जब आप छवि चयन दोहराते हैं तो क्या कोई पैटर्न दिखाई देता है ..? – Ronnie

+2

शायद गैलरी में थंबनेल गलत हैं। अगर छवियां हटा दी जाती हैं तो यह खुशी हो सकती है क्योंकि एंड्रॉइड छवि आईडी का पुन: उपयोग करता है। – uwe

+0

@ userSeven7s: हमेशा जब मैं गैलरी ऐप के sdcard फ़ोल्डर से चुनता हूं। – Josh

उत्तर

4

कभी-कभी गैलरी ऐप में थंबनेल पुराने हो सकते हैं और एक अलग छवि के लिए थंबनेल दिखा सकते हैं। यह तब हो सकता है जब छवि आईडी का पुन: उपयोग किया जाता है, उदाहरण के लिए जब कोई छवि हटा दी जाती है और एक ही आईडी का उपयोग करके एक नया जोड़ा जाता है।

ऐप्स प्रबंधित करें> गैलरी> साफ़ डेटा इस समस्या को ठीक कर सकता है।

+0

फिर से धन्यवाद! दुर्भाग्यवश ऐसा लगता है कि सिस्टम ऑटो ने दूसरे दिन बाहर निकलने पर बक्षीस सौंपा, लेकिन मैंने आपको सही उत्तर के रूप में चिह्नित किया है :) – Josh

5

इस गैलरी खोलने के लिए कोड है:

इसके अलावा, इस कोड मैं अब आशय आग का उपयोग कर रहा है। हालांकि यह वही है जो आपने किया है। onActivityResult कोड भी देखें जो मैं चयनित छवि को पुनः प्राप्त करने के लिए उपयोग करता था।

Intent intent = new Intent(); 
intent.setType("image/*"); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 
         PHOTO_GALLERY); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
switch (requestCode) { 
    case PHOTO_GALLERY: 
     if (resultCode == RESULT_OK) { 
      Uri selectedImageUri = Uri.parse(data.getDataString()); 
      try { 
       Bitmap bitmap = MediaStore.Images.Media.getBitmap( 
            getApplicationContext().getContentResolver(), 
            selectedImageUri); 

       this.postImagePreview.setImageBitmap(bitmap); 
      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      break; 
     } 
    } 
} 
+0

मेरा संपादन देखें, यह अभी भी काम नहीं कर रहा है। – Josh

3

private static int RESULT_LOAD_IMAGE = 1;

Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(i, RESULT_LOAD_IMAGE); 

OnActivity परिणाम

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 
       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 picturePath = cursor.getString(columnIndex); 
       cursor.close(); 
       ImageView imageView = (ImageView) findViewById(R.id.imgView); 
       imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
      } 
     } 
+0

थोड़ा अलग इरादा के अलावा, यह वास्तव में मेरे पास अभी भी सही है, जैसा कि मेरे पिछले पोस्ट संपादन में उल्लेख किया गया है। मैंने आपके इरादे की आग का प्रयास किया, और यह अभी भी एक ही परिणाम उत्पन्न करता है। आपके उत्तर के लिए – Josh

+0

+1 बमबैट – dhams

3

, कोशिश यह एक

//Put this code on some event 

    Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

startActivityForResult(intent, REQUEST_CODE); 

      // When above event fire then its comes to this 
     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
       if (resultCode==RESULT_OK && requestCode==1){ 

        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]); 
        filePath = cursor.getString(columnIndex); 
        cursor.close(); 

          // Use it as per recruitment 
        actualBitmap =BitmapFactory.decodeFile(filePath); 

       } 
    } 
0

इस प्रयास करें

public class SelectPhotoActivity extends Activity { 

private static final int SELECT_PICTURE = 1; 
private String selectedImagePath=""; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivityForResult(intent, SELECT_PICTURE); 
} 

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == RESULT_OK) { 
     if (requestCode == SELECT_PICTURE) 
     { 
      Uri selectedImageUri = data.getData(); 
      selectedImagePath = getPath(selectedImageUri); 
      // here you can set the image 
      } 
    } 
} 

}