[英]How to pass a URI to an intent?
我正在嘗試將 URI 對象傳遞給我的 Intent,以便在另一個活動中使用該 URI。
如何傳遞 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 ...
您可以將 uri 存儲為字符串
intent.putExtra("imageUri", imageUri.toString());
然后像這樣將字符串轉換回 uri
Uri myUri = Uri.parse(extras.getString("imageUri"));
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
。
Intent中可以直接放Uri。 您不需要將 Uri 轉換為字符串並再次轉換回 Uri。
看看這個簡單的方法。
// put uri to intent
intent.setData(imageUri);
並從意圖中恢復 Uri:
// Get Uri from Intent
Uri imageUri=getIntent().getData();
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"));
在這里我如何使用它; 我的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);
如果你想使用標准的額外數據字段,你可以這樣做:
private Uri imageUri;
....
Intent intent = new Intent(this, GoogleActivity.class);
intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString());
startActivity(intent);
this.finish();
Intent 的文檔說:
EXTRA_STREAM added in API level 1
String EXTRA_STREAM
A content: URI holding a stream of data associated with the Intent,
used with ACTION_SEND to supply the data being sent.
Constant Value: "android.intent.extra.STREAM"
您不必使用內置的標准名稱,但這可能是一種很好的做法,而且更可重用。 查看開發人員文檔以獲取所有內置標准額外數據字段的列表。
Uri.parse(extras.getString("imageUri"))
導致錯誤:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.content.Intent.putExtra(java.lang.String, android.os.Parcelable)' on a null object reference
所以我改為以下內容:
intent.putExtra("imageUri", imageUri)
和
Uri uri = (Uri) getIntent().get("imageUri");
這解決了問題。
你可以這樣做。 imageuri 可以像這樣轉換成字符串。
intent.putExtra("imageUri", imageUri.toString());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.