Как передать 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 83

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"

вы не должны использовать встроенные стандартные имена, но это, вероятно, и более многоразовый. Взгляните на документацию разработчика для получения списка всех встроенных стандартных дополнительных полей данных.

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"));

вы можете сделать такой. imageuri может быть преобразован в строку, как это.

намерениях.putExtra("imageUri", imageUri.toString ());