2011-11-05 7 views
66

मैं उपयोग करने के लिए है कि एक और गतिविधि में यूआरआई ...किसी इरादे को यूआरआई कैसे पास किया जाए?

मैं कैसे एक URI पारित करते क्रम में मेरी आशय के एक URI-वस्तु पारित करने के लिए कोशिश कर रहा हूँ?

private Uri imageUri; 
.... 
Intent intent = new Intent(this, GoogleActivity.class); 
intent.putExtra("imageUri", imageUri); 
startActivity(intent); 
this.finish(); 

अब मैं अपनी अन्य गतिविधि में इस यूआरआई का उपयोग कैसे करूं?

imageUri = extras.getString("imageUri"); // I know thats wrong ... 

तुम लोगों

+0

संभव डुप्लिकेट [कैसे एंड्रॉयड में आशय से अतिरिक्त डेटा प्राप्त करने के?] (http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android) –

+0

संभावित डुप्लिकेट [एक एंड्रॉइड गतिविधि से किसी ऑब्जेक्ट को इरादों का उपयोग करके कैसे भेजें? ] (http://stackoverflow.com/questions/2 139134/कैसे-से-send-an-object-from-one-android-activity-to-another-use-intents) – Craigy

उत्तर

142

आप स्ट्रिंग

intent.putExtra("imageUri", imageUri.toString()); 

रूप uri स्टोर कर सकते हैं और फिर बस इस

Uri myUri = Uri.parse(extras.getString("imageUri")); 
+1

ठीक है ... लेकिन मुझे नहीं पता कि एक यूरी को स्ट्रिंग के रूप में कैसे स्टोर किया जाए :( –

+0

उपरोक्त कोड में, इसे एक स्ट्रिंग में परिवर्तित किया गया है। imageuri।toString() यूरी को आपके लिए एक स्ट्रिंग में परिवर्तित कर रहा है। – Rufflez

+1

@malclocke का एक बेहतर समाधान है। मैन्युअल रूप से स्ट्रिंग और बैक में कनवर्ट करने की आवश्यकता नहीं है। – clocksmith

0
private Uri imageUri; 
.... 
Intent intent = new Intent(this, GoogleActivity.class); 
intent.putExtra("imageUri", imageUri.toString()); 
startActivity(intent); 
this.finish(); 


तरह uri वापस करने के लिए स्ट्रिंग में कनवर्ट धन्यवाद और फिर आप इसे इस तरह लाने कर सकते हैं:

imageUri = Uri.parse(extras.getString("imageUri")); 
119

Uri वर्ग Parcelable लागू करता है, तो आप Intent

// Add a Uri instance to an Intent 
intent.putExtra("imageUri", uri); 

// Get a Uri from an Intent 
Uri uri = intent.getParcelableExtra("imageUri"); 

से सीधे जोड़ने और इसे निकाल सकते हैं आप किसी भी वस्तुओं के लिए एक ही विधि का उपयोग कर सकते हैं जो Parcelable को लागू करता है, और यदि आवश्यक हो तो आप अपनी खुद की वस्तुओं पर Parcelable लागू कर सकते हैं।

+7

भविष्य में किसी को भी संकेत दें: सुनिश्चित करें कि आप 'android.net.Uri' का उपयोग कर रहे हैं और 'java.net.URI' नहीं! –

+3

भविष्य के संदर्भ के लिए, यदि आप 'intent.putExtras (बंडल) का उपयोग करने से पहले बंडल ऑब्जेक्ट में कई अतिरिक्त डाल रहे हैं; '' bundle.putParcelable ("imageUri", uri) का उपयोग करें; 'intent.putExtra (...); सीधे 'इरादे' वस्तु में। – Armando

38

एक इरादे में, आप सीधे उरी डाल सकते हैं। आपको उरी को स्ट्रिंग करने और फिर उरी में कनवर्ट करने की आवश्यकता नहीं है।

इस सरल दृष्टिकोण को देखें।

// Put the uri to intent 
intent.setData(imageUri); 

और उरी के इरादे से वापस पाने के लिए:

// Get the Uri from Intent 
Uri imageUri = getIntent().getData(); 
+12

पाठकों से स्पष्ट रूप से आपकी पोस्ट को +1 करने के लिए पूछना मेरे लिए एक संदिग्ध प्रथा प्रतीत होता है। क्या आपके समाधान का अतिरिक्त मूल्य खुद के लिए नहीं बोलना चाहिए? –

-1

आप इस तरह कर सकते हैं। इमेजरी को इस तरह स्ट्रिंग में परिवर्तित किया जा सकता है।

intent.putExtra ("imageUri", imageUri.toString());

0

यहां मैं इसका उपयोग कैसे करता हूं; मेरी CameraActionActivity गतिविधि वर्ग मैं कहाँ फोन कैमरा

btn_frag_camera.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intenImatToSec = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 
       startActivityForResult(intenImatToSec, REQUEST_CODE_VIDEO); 
       //intenImatToSec.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
       //intenImatToSec.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10); 
       //Toast.makeText(getActivity(), "Hello From Camera", Toast.LENGTH_SHORT).show(); 
      } 
     }); 



@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == RESULT_OK) { 

      if (requestCode == REQUEST_CODE_IMG) { 
       Bundle bundle = data.getExtras(); 
       Bitmap bitmap = (Bitmap) bundle.get("data"); 
       Intent intentBitMap = new Intent(getActivity(), DisplayImage.class); 
       // aldıgımız imagi burda yonlendirdiğimiz sınıfa iletiyoruz 
       ByteArrayOutputStream _bs = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.PNG, 50, _bs); 
       intentBitMap.putExtra("byteArray", _bs.toByteArray()); 
       startActivity(intentBitMap); 

      } else if (requestCode == REQUEST_CODE_VIDEO) { 
       Uri videoUrl = data.getData(); 
       Intent intenToDisplayVideo = new Intent(getActivity(), DisplayVideo.class); 
       intenToDisplayVideo.putExtra("videoUri", videoUrl.toString()); 
       startActivity(intenToDisplayVideo); 
      } 
     } 
    } 

और मेरे अन्य DisplayVideo गतिविधि कक्षा के अंदर यह बटन

VideoView videoView = (VideoView) findViewById(R.id.videoview_display_video_actvity); 
Bundle extras = getIntent().getExtras(); 
     Uri myUri= Uri.parse(extras.getString("videoUri")); 
     videoView.setVideoURI(myUri); 
की