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);
}