2014-12-31 3 views
5

पर कॉल करने के बाद अचयनित हैं I एक ऐप विकसित कर रहा हूं, और इस गतिविधि में एक बटन दबाया जाता है और अपलोड करने के लिए किसी भी फ़ाइल का चयन किया जा सकता है। फ़ाइल चयनकर्ता सही ढंग से लोड हो जाता है, लेकिन सभी छवियां अचयनित (ग्रिड आउट) हैं। मैंने मैनिफेस्ट फ़ाइल में READ_EXTERNAL_STORAGE अनुमति को जोड़ा, लेकिन मुझे नहीं पता कि यह अभी भी मुझे फ़ाइल चुनने नहीं देगा। यहां कोड है जिसका उपयोग मैंफ़ाइलें ACTION_GET_CONTENT इराद

private Button uploadButton; 
private TextView uploadFile; 
private static final int PICKFILE_RESULT_CODE = 1; 
private String selectedImagePath; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    uploadButton = (Button)findViewById(R.id.upload_button); 
    uploadFile = (TextView)findViewById(R.id.uploadFile); 

    uploadButton.setOnClickListener(new View.OnClickListener() 
    { 

     public void onClick(View v){ 

      Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
       intent.setType("file/*"); 
      startActivityForResult(intent, PICKFILE_RESULT_CODE); 
    }}); 
    } 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch(requestCode){ 
    case PICKFILE_RESULT_CODE: 
     if (resultCode==RESULT_OK){ 
      String FilePath = data.getData().getPath(); 
      uploadFile.setText(FilePath); 
     } 
     break; 
    } 
} 
+9

शायद वहाँ प्रकार के साथ 'कोई फ़ाइलें हैं" फ़ाइल/* "' आप की कोशिश की '" */* "' – Blundell

+1

@Blundell intent.setType ("\ */\ *") काम किया है मेरे लिए और फाइलें अब और भूरे रंग के नहीं हैं। –

उत्तर

4

ब्लंडेल ने उपरोक्त टिप्पणी में इसका उल्लेख किया है, लेकिन आप नीचे अपनी मेनिफेस्ट फ़ाइल में भी जोड़ सकते हैं। इसके अलावा, आप उपयोगकर्ता किसी भी सामग्री का चयन करने में सक्षम हो नहीं करना चाहते हैं setType उपयोग करने का प्रयास ("छवि/*)।

<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" /> 
+0

ब्लंडेल की सिफारिश काम किया, मदद के लिए धन्यवाद! –

+0

@ ब्लंडेल मुझे एक ही समस्या का सामना करना पड़ता है। लेकिन यहां मैं sqlite डेटाबेस (.mdb) फ़ाइल पढ़ता हूं। और यहां तक ​​कि मैंने मैनिफेस्ट फ़ाइल में पढ़ने की अनुमति भी सेट की है, मैं इसे चुनने में सक्षम नहीं हूं। लेकिन एंड्रॉइड मोबाइल एपीआई लेवल 9 है, यह ठीक काम कर रहा है (चुनने में सक्षम)। तो क्या मुझे पता है कि एपीआई स्तर में क्या गलत है> 9 .. – Haji

+0

यह समाधान मेरे लिए काम नहीं करता है। –

8

रूप Blundell ने सुझाव दिया "*/* के प्रकार सेट करके देखें।

टाइप आप onActivityResult उन्हें फ़ाइल के प्रकार लॉग इन करना चाहिए (this answer दिखाता है कि कैसे)। फिर वैध फ़ाइलों के एक जोड़े की कोशिश, लॉग को देखने और उसके अनुसार intent.setType संशोधित करते हैं। आप किटकैट पर और this answer में वर्णित के रूप में ऊपर कई प्रकार का उपयोग कर सकते हैं।

2

जब मैंने marshmellow और नीचे कोड के साथ कोशिश की ई मदद की। मैंने सी # (xamarin) के साथ प्रयास किया है। एकाधिक माइम प्रकार कुंजी है। उम्मीद है कि यह किसी को मदद मिलती है

Intent intent = new Intent(Intent.ActionOpenDocument); 
      intent.SetType("file/*"); 
      intent.AddCategory(Intent.CategoryOpenable); 
      String[] mimeTypes = { "text/csv", "text/comma-separated-values" ,"application/pdf","image/*"}; 
      intent.PutExtra(Intent.ExtraMimeTypes, mimeTypes); 
      ((FormsAppCompatActivity)Forms.Context).StartActivityForResult(intent, 7007); 
+1

अब निचले/ऊपरी मामले को कभी न मानें। लेकिन आप पहली बार कैसे इरादा करते हैं। सैट टाइप ("फ़ाइल/*"); और फिर इरादा। सैट टाइप ("*/*"); दूसरा कॉल पहले व्यक्ति को ओवरराइट करता है जो इसे अनावश्यक बनाता है। – lukassos

+0

@lukassos मेरी गलती को सही करने के लिए धन्यवाद .. –

+1

+1 धन्यवाद :) बीटीडब्ल्यू मैंने आपके समाधान का उपयोग किया है क्योंकि यह ऊपर से सबसे सरल है – lukassos

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