Alternative of deprecated startActivityForResult

Alternative of deprecated startActivityForResult in Android is ActivityResultLauncher

Older code using startActivityForResult

public void openSomeActivityForResult() {
    Intent intent = new Intent(this, SomeActivity.class);
    startActivityForResult(intent, 100);
}

@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
    if (resultCode == Activity.RESULT_OK && requestCode == 100) {
        doSomeOperations();
    }
}

New code with ActivityResultLauncher

ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
    @Override
    public void onActivityResult(ActivityResult result) {
        if (result.getResultCode() == Activity.RESULT_OK) {
            Intent intent = result.getData();
            // Handle the Intent
        }
    }
});

@Override
public void onCreate(@Nullable savedInstanceState: Bundle) {
    // ...

    Button startButton = findViewById(R.id.start_button);

    startButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            // The launcher with the Intent you want to start
            mStartForResult.launch(new Intent(this, ResultProducingActivity.class));
        }
    });
}

Example of ActivityResultLauncher

ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
                new ActivityResultCallback<ActivityResult>() {
                    @Override
                    public void onActivityResult(ActivityResult result) {
                        if (result.getResultCode() == Activity.RESULT_OK) {
                            Intent intent = result.getData();
                          
                        }
                    }
                });
 Uri selectedUri = Uri.parse(Environment.getExternalStorageDirectory() +  File.separator +  DIRECTORY_DOWNLOADS + File.separator);
       System.out.println("working"+selectedUri.getPath());
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        //intent.setType("video/* image/*");
        intent.setDataAndType(selectedUri, "video/* image/*");
        if (intent.resolveActivityInfo(getPackageManager(), 0) != null)
        {
            mStartForResult.launch(intent);
        }

Leave a Comment