2011-11-05 86 views
66

我試圖將URI對象傳遞給我的意圖,以便在另一個活動中使用該URI ...如何將URI傳遞給intent?

如何傳遞URI?

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

如何在我的其他活動中使用此URI?

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

謝謝你們

+0

可能重複[如何從Android中意圖額外的數據?] (http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android) –

+0

可能的重複[如何使用Intents從一個Android活動發送對象到另一個? ](http://stackoverflow.com/questions/2 139134 /如何發送一個對象從一個Android的活動,以另一種使用意圖) – Craigy

回答

142

您可以將URI存儲爲字符串

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

,然後只是轉換的字符串返回URI這樣

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

好酷...但我不知道如何存儲一個字符串:( –

+0

在上面的代碼中,它轉換爲一個字符串。 imageuri。toString()將uri轉換爲一個字符串。 – Rufflez

+1

@malclocke有更好的解決方案。無需手動轉換爲字符串並返回。 – clocksmith

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


然後你就可以像這樣取,

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);'之前在Bundle對象中添加了多個額外元素,請使用'bundle.putParcelable(「imageUri」,uri);'而不是使用'intent.putExtra ...);'直接在'Intent'對象中。 – Armando

38

在一個意圖,你可以直接把Uri。您不需要將Uri轉換爲字符串,然後再轉換回Uri。

看看這個簡單的方法。

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

而要得到URI從後面的意圖:

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

要求讀者明確地+1您的帖子似乎是一個令人懷疑的做法給我。你的解決方案的附加價值不應該說明問題嗎? –

-1

你可以做到這樣。 imageuri可以像這樣轉換成字符串。

intent.putExtra(「imageUri」,imageUri.toString());

0

這裏我如何使用它; 我CameraActionActivity Activity類,我稱之爲相機

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); 
相關問題