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 ...
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();
의도 문서에는 다음과 같이 기재되어 있습니다.
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());
언급URL : https://stackoverflow.com/questions/8017374/how-to-pass-a-uri-to-an-intent
'programing' 카테고리의 다른 글
문자 집합과 대조는 정확히 무엇을 의미합니까? (0) | 2022.09.24 |
---|---|
Twitter API 버전 1.1에서 user_timeline을 검색하는 가장 간단한 PHP 예제 (0) | 2022.09.24 |
Javascript에서 숫자를 반올림하려면 어떻게 해야 하나요? (0) | 2022.09.21 |
SQLite 대신 MySQL을 사용하여 새 Ruby on Rails 응용 프로그램 만들기 (0) | 2022.09.21 |
원칙이 있는 여러 열로 정렬 (0) | 2022.09.21 |