从Android 11(API 30)开始,Google不推荐使用onActivityResult()方法作为从Activity中获取结果的方式。此外,Android AutoResolveHelper.resolveTask()方法也被修改,需要使用新的方法来替代。
以下是使用ActivityResultContracts.StartIntentSenderForResult解决这些问题的示例代码:
在Activity中:
private ActivityResultLauncher mStartIntentSenderForResult;
private IntentSenderRequest mIntentSenderRequest;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化 ActivityResultLauncher
mStartIntentSenderForResult = registerForActivityResult(
new ActivityResultContracts.StartIntentSenderForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
// 处理成功结果
} else {
// 处理取消或错误结果
}
});
// 构建 IntentSenderRequest 对象
IntentSender intentSender = ...;
mIntentSenderRequest = new IntentSenderRequest.Builder(intentSender).build();
// 启动结果处理方法
mStartIntentSenderForResult.launch(mIntentSenderRequest);
}
在Fragment中:
private ActivityResultLauncher mStartIntentSenderForResult;
private IntentSenderRequest mIntentSenderRequest;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化 ActivityResultLauncher
mStartIntentSenderForResult = registerForActivityResult(
new ActivityResultContracts.StartIntentSenderForResult(),
result -> {
if (result.getResultCode() == Activity.RESULT_OK) {
// 处理成功结果
} else {
// 处理取消或错误结果
}
});
// 构建 IntentSenderRequest 对象
IntentSender intentSender = ...;
mIntentSenderRequest = new IntentSenderRequest.Builder(intentSender).build();
}
public void startIntentSenderForResult() {
// 启动结果处理方法
mStartIntentSenderForResult.launch(mIntentSenderRequest);
}