2014-11-06 2 views
0

Я работаю над кодом, написанным кем-то другим, и у меня возникают проблемы с обработкой результата намерения камеры.Камера onActivityResult на фрагменте

В основном у меня есть DashBoardActivity, которая содержит вкладку с фрагментом под названием «MyProfileContainer», который содержит фрагмент «SettingsFragment», который содержит фрагмент «EditProfileFragment».

В EditProfileFragment пользователь может сделать снимок для своего профиля. Он работает, но он вызывает onActionResult в Activity Dashboard.

Я прочитал некоторое руководство о том, как перенаправить его в EditProfileFragment, но я не смог это сделать. Я теряю буквально дни на этом, и я не могу понять это.

Это onActivityResult на Dashboard активность

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
} 

И это EditProfileFragment

private Uri imageUri = null; 

public void captureImage() { 

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, 
      Uri.fromFile(photo)); 
    imageUri = Uri.fromFile(photo); 
    getParentFragment().startActivityForResult(intent, 100); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

      if (requestCode == 100 && resultCode == Activity.RESULT_OK) { 
       Uri selectedImage = imageUri; 
       getActivity().getContentResolver().notifyChange(selectedImage, null); 
       ContentResolver cr = getActivity().getContentResolver(); 
       Bitmap bitmap; 
       try { 
        bitmap = android.provider.MediaStore.Images.Media 
          .getBitmap(cr, selectedImage); 

        profilePhoto.setImageBitmap(bitmap); 
        Toast.makeText(getActivity(), selectedImage.toString(), 
          Toast.LENGTH_LONG).show(); 
       } catch (Exception e) { 
        Toast.makeText(getActivity(), "Failed to load", Toast.LENGTH_SHORT) 
          .show(); 
        Log.e("Camera", e.toString()); 
       } 
      } 

} 

Я не знаю, если я должен переопределить метод на каждом классе между этими двумя или если I «Я делаю что-то еще неправильно, но я уверен, что EditProfileFragment onActivityResult никогда не вызывается.

ответ

0

Я выяснил эту проблему, и на самом деле это была ошибка Android.

Фрагмент, который должен был получить результат, был фрагмент, вложенный внутри другого фрагмента, и вызов метода не был должным образом распространен настолько глубоко.

Мне пришлось переопределить метод на содержащем фрагменте вручную, и это сработало.

0

Легкий трюк для вызова OnActivityResult во вложенном фрагменте.

1) Добавьте этот код в свой метод captureImage, и он начнет новое действие.

Целевое намерение = новое намерение (getContext(), CameraPreviewActivity.class);

startActivityForResult (намерение, 111);

2) Теперь откроется функция CameraPreviewActivity, и она начнет работу с камерой и вернет результат в фрагмент.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(intent, FragmentAccPhoto.REQUEST_IMAGE_CAPTURE); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    setResult(RESULT_OK, data); 
    finish(); 
}