Как передать URI намерению?
Я пытаюсь передать URI-объект моему намерению, чтобы использовать этот 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 ...
Спасибо, ребята!--3-->
7 ответов:
вы можете сохранить URI как строку
intent.putExtra("imageUri", imageUri.toString());
а затем просто преобразовать строку обратно в uri, как это
Uri myUri = Uri.parse(extras.getString("imageUri"));
The
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);
и чтобы вернуть Ури из намерения:
// Get Uri from Intent Uri imageUri=getIntent().getData();
вот как я использую его; Эта кнопка внутри моего 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);
Если вы хотите использовать стандартное дополнительное поле данных, вы должны сделать что-то вроде этого:
private Uri imageUri; .... Intent intent = new Intent(this, GoogleActivity.class); intent.putExtra(Intent.EXTRA_STREAM, imageUri.toString()); startActivity(intent); this.finish();
в документации по намерению говорится:
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"
вы не должны использовать встроенные стандартные имена, но это, вероятно, и более многоразовый. Взгляните на документацию разработчика для получения списка всех встроенных стандартных дополнительных полей данных.