Android получить фото с камеры или галереи, используя фрагменты
Я использую FragmentPagerAdapter
с тремя вкладками. Каждая вкладка имеет несколько fragments
В одном из этих фрагментов я прошу получить фотографию из галереи или камеры. Вопрос onActivityResult()
родителя Activity
хостинг вкладки вызывается не из Fragment
, Помощь оценена.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case MEDIA_TYPE_IMAGE_FROM_GALLERY:
if (resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
String realPath = getImageRealPath(selectedImage);
realPaths.add(realPath);
Glide.with(mActivity)
.load(realPath)
.into(profile_imv);
}
break;
case MEDIA_TYPE_IMAGE_BY_CAMERA:
if (resultCode == RESULT_OK) {
Uri selectedImage = data.getData();
String realPath = getImageRealPath(selectedImage);
realPaths.add(realPath);
Glide.with(mActivity)
.load(realPath)
.into(profile_imv);
}
break;
}
}
Вот как я называю Intent для галереи и камеры
public void choosePhotoFromGallary() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, MEDIA_TYPE_IMAGE_FROM_GALLERY);
}
private void takePhotoFromCamera() {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
if (intent.resolveActivity(mActivity.getPackageManager()) != null) {
startActivityForResult(intent, MEDIA_TYPE_IMAGE_BY_CAMERA);
}
}
Это MainACtivity
onActivityResult()
код
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().findFragmentByTag("USER_DETAILS");
if (fragment != null) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
2 ответа
Переопределите onActiviyResult() внутри фрагмента и перепишите код там.
+ Изменить getActivity().startActivityForResult(..)
в startActivityForResult(..)
это передаст намерение результата фрагменту onActivityResult(..)
Красиво объяснил в этом посте здесь