david ortiz steroids oral steroids what do steroids do to your body moon face steroids liver steroids steroids for bronchitis types of steroids

Android OnActivityResult is Deprecated. Now What?

Last Updated on August 21, 2023

Hi and welcome to another tutorial from Codingdemos. I did a tutorial a while back that showed you how to take a photo using the camera and display it in Android Imageview. Few months after that, one of the methods that I used in the tutorial called Android OnActivityResult was deprecated. In this tutorial, we will look into the alternative method that replaced this called Android ActivityResultLauncher. Let’s start coding 🙂

Android onActivityResult Deprecated

By the end of this tutorial, you will have an app that looks like this. (Large preview)

build bigger arms with this 10-move workout | men’s fitness uk effects of dianabol barefoot benefits: 10 reasons walking barefoot is good for you!

In this tutorial we will be using the following:

  • Android Studio version 4.1.2

  • Minimum SDK API 23

1- Open Android Studio.

Android studio 4.1.2 welcome screen

Android studio 4.1.2 welcome screen. (Large preview)

2- Open MainActivity.java file, here we will do some changes by replacing the Android OnActivityResult implementation with Android ActivityResultLauncher. First will start by commenting out the Android OnActivityResult part.


@Override
  protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == CAMERA_ACTION_CODE && resultCode == RESULT_OK && data != null){
      Bundle bundle = data.getExtras();
      Bitmap bitmap = (Bitmap) bundle.get("data");
      imageView.setImageBitmap(bitmap);
    }
  }

3- Next, you need to comment out the other part of onActivityResult inside the Android Button OnClickListener method.


startActivityForResult(intent, CAMERA_ACTION_CODE);

4- Now, you need to declare Android ActivityResultLauncher.


ActivityResultLauncher activityResultLauncher;

5- You will need to initialize ActivityResultLauncher before you use it inside the Button’s OnClickListener.


activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
      @Override
      public void onActivityResult(ActivityResult result) {
        
      }
    });

As you can see from the code above, the registerForActivityResult takes 2 arguments:

  • ActivityResultContracts.StartActivityForResult()
  • ActivityResultCallback()

6- Inside the onActivityResult is where you will add the code that you previously used.


if(requestCode == CAMERA_ACTION_CODE && resultCode == RESULT_OK && data != null){
          Bundle bundle = data.getExtras();
          Bitmap bitmap = (Bitmap) bundle.get("data");
          imageView.setImageBitmap(bitmap);
        }

7- The ActivityResultLauncher doesn’t have requestCode and resultCode. Let’s make some slight changes to make it all work.


if (result.getResultCode() == RESULT_OK && result.getData() != null) {
          Bundle bundle = result.getData().getExtras();
          Bitmap bitmap = (Bitmap) bundle.get("data");
          imageView.setImageBitmap(bitmap);
}

What we did here, is we replaced requestCode and resultCode with result.getResultCode(). We also replaced the data with result.getData().

8- Let’s make the final change inside the Android’s Button setOnClickListener by replacing startActivityForResult(intent, CAMERA_ACTION_CODE); with the following code.


activityResultLauncher.launch(intent);

9- Now build and run the app to see the result.

Android ActivityResultLauncher

Taking a photo with the camera using Android ActivityResultLauncher. (Large preview)

10- Here is the full code for MainActivity.java file.


package com.codingdemos.codingdemos;

import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
  
  ImageView imageView;
  Button takePhoto;
  ActivityResultLauncher activityResultLauncher;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imageView = findViewById(R.id.imageView);
    takePhoto = findViewById(R.id.btnPhoto);

    activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
      @Override
      public void onActivityResult(ActivityResult result) {
        if (result.getResultCode() == RESULT_OK && result.getData() != null) {
          Bundle bundle = result.getData().getExtras();
          Bitmap bitmap = (Bitmap) bundle.get("data");
          imageView.setImageBitmap(bitmap);
        }
      }
    });


    takePhoto.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (intent.resolveActivity(getPackageManager()) != null) {
          activityResultLauncher.launch(intent);
        } else {
          Toast.makeText(MainActivity.this, "There is no app that support this action",
              Toast.LENGTH_SHORT).show();
        }
      }
    });
  }
}

11- Show some love by sharing the post, and if you have any questions, please post them in the comment below. Happy coding 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>