Cómo encapsular un startActivityForResult en una clase Java y obtener el onActivityResult sobre la actividad que se llama el método

Demi Dimitrova:

Im usando el siguiente código de cámara en varias actividades y me gustaría hacer una clase que encapsula los métodos para el uso de la cámara en Android.

Lo que estoy tratando de conseguir es la clase Actividad ser algo como:

Public class Myfragment extends Fragment{
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.profile_fragment, container, false);
        mButtonProfilePhoto = v.findViewById(R.id.buttonProfilePhoto);

        mButtonProfilePhoto.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        //Here I call the camera intent.
            Camera.dispatchTakePictureIntent(getActivity(), mPhotoFile);
            }
            });

    return v;
    }
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
              //handle the camera result
}

La clase de la cámara es como la siguiente:

public class Camera{
public static void dispatchTakePictureIntent(Activity activity, File file) {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
        // Create the File where the photo should go
        file = null;
        try {
            file = Camera.createImageFile(activity);
        } catch (IOException ex) {
            // Error occurred while creating the File

        }
        // Continue only if the File was successfully created
        if (file  != null) {
            Uri photoURI = FileProvider.getUriForFile(activity,
                    "com.itcom202.weroom.fileprovider",
                    file );
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
            startActivityForResult( takePictureIntent, REQUEST_IMAGE_CAPTURE);


        }
    }
}
}

El problema que tengo ahora es que nunca consigo una llamada de vuelta onActivityResulta partir del fragmento.

Xavier Rubio Jansana :

OS no tiene soporte para enviar onActivityResult()a Fragment's. Biblioteca de ayuda, sin embargo, tiene un mecanismo para hacer eso, que los registros de la llamada a una mesa especial en el AppCompatActivity. El truco aquí es que usted tiene que utilizar Fragment's propia startActivityForResult(), no Activity' s uno.

Por lo tanto, el Cameracódigo de la clase debe ser similar a:

public class Camera{

    public static void dispatchTakePictureIntent(Activity activity, Fragment fragment, File file) {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // Ensure that there's a camera activity to handle the intent
        if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {
            // Create the File where the photo should go
            file = null;
            try {
                file = Camera.createImageFile(activity);
            } catch (IOException ex) {
                // Error occurred while creating the File

            }
            // Continue only if the File was successfully created
            if (file  != null) {
                Uri photoURI = FileProvider.getUriForFile(activity,
                        "com.itcom202.weroom.fileprovider",
                        file );
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                fragment.startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    }

}

Aviso última línea está utilizando Fragment'sstartActivityForResult()

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214932&siteId=1
Recomendado
Clasificación