2011-12-27 16 views
6
  1. लॉन्च तस्वीर Intent.ACTION_GET_CONTENT
  2. का उपयोग कर पिकर Intent.ACTION_GET_CONTENT से फ़ाइल में
  3. चयनित आइटम के यूआरआई पुनः प्राप्त
  4. यूआरआई की पथ पुन: प्राप्त करें ताकि मैं इसे अपने वेबसर्वरयूआरआई

    संहिता के पोस्ट कर सकते हैं ब्राउज़

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("image/*"); 
    startActivityForResult(intent, BROWSE_IMAGE_REQUEST_CODE); 
    

    कोड लॉन्च करने का चयन पुनः प्राप्त करने के छवि

    if (RESULT_OK == resultCode && 
          BROWSE_IMAGE_REQUEST_CODE == requestCode) { 
    Uri uri = data.getData(); 
    

    कोड वेब सर्वर पर भेजने के लिए

    File file = new File(uri.getPath()); 
    new FileSystemResourceFile(file); 
    

मैं वर्तमान में /external/images/media/24 कोई समस्या URI से पथ को पुनः प्राप्त करने में सक्षम हूँ, लेकिन कुछ अजीब कारण फ़ाइल के लिए हमेशा रिक्त है , कृपया मदद करें?

+2

uri.getPath()/बाहरी है/images/मीडिया/24। यह फाइल है? – miqbal

+0

हां और मैं उस फ़ाइल को फ़ाइलसिस्टम रिसोर्सफाइल पर – lemon

उत्तर

19

मैं इस विधि Intent.ACTION_GET_CONTENT से Uri कन्वर्ट करने के लिए वास्तविक पथ के लिए किया है:

public static String getRealPathFromUri(Activity activity, Uri contentUri) { 
    String[] proj = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = activity.managedQuery(contentUri, proj, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

कौन सा बदले में File में परिवर्तित कर दिया:

Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM); 
filePathFromActivity = Uri.parse(FileUtil.getRealPathFromUri((Activity) IntentActivity.this, filePathFromActivity)); 
File imageFile = new File(filePathFromActivity.getPath()); 
+2

गतिविधि का उपयोग करने की कोशिश कर रहा हूं Activity.managedQuery की कमी है। उपयोग करें: \t कर्सर लोडर लोडर = नया कर्सर लोडर (गतिविधि, सामग्रीउरी, प्रोज, नल, नल, नल); इसके बजाय – Patrick

+1

@ पैट्रिक यह मेरे लिए बहुत स्पष्ट नहीं है कि आप इस मामले में एक कर्सर लोडर का उपयोग कैसे करेंगे। या बिल्कुल इसका उपयोग कैसे करें, स्पष्ट रूप से। दस्तावेज वांछित होने के लिए बहुत छोड़ देता है। चूंकि मैं इस पूरे कार्य को थ्रेड में चला सकता हूं, इसलिए मैं आपकी सलाह को अनदेखा कर रहा हूं और बहिष्कृत प्रबंधितQuery() का उपयोग कर रहा हूं। क्योंकि यह और अधिक स्पष्ट है कि यह काम कैसे करें, खासकर जब से मुझे एक तुल्यकालिक परिणाम की आवश्यकता है। – SomeCallMeTim

+0

@ SomCallMeTim कर्सर लोडर का उपयोग करने के लिए बस loadInBackground() विधि को कॉल करें। यह एक कर्सर वापस करेगा। http://developer.android.com/reference/android/content/CursorLoader.html#loadInBackground%28%29 –

संबंधित मुद्दे