java - 打开外部 URL 时“片段中的 startActivityForResult(Intent,int) 已弃用”的 Java 解决方案?
问题描述
我的应用程序包含一个简单的片段,用于打开外部网页,其中:
Intent intent = new Intent(Intent.ACTION_VIEW, externalUrl); // Uri
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent chooserIntent = Intent.createChooser(intent, "Open URL...");
startActivityForResult(chooserIntent, RC_OPEN_URL);
并且,当返回结果时(在我的 Fragment 中onActivityResult(...)
),Fragment 会从后台堆栈中弹出。
但是,我现在收到了新的弃用警告:
Fragment 中的 startActivityForResult(Intent,int) 已被弃用
我已经阅读了相应的从活动文档中获取结果,但我不确定如何调整它们为我的特定案例提供的示例。
我发现了ActivityResultContracts.StartActivityForResult类,但不知道如何将我的传递chooserIntent
给它。
该类的所有在线示例似乎都在 Kotlin 中,而我尝试将它们反编译为 Java 并没有任何乐趣。因此,非常感谢您提供如何使用新的registerForActivityResult()方法打开外部 URL 的 Java 示例。
解决方案
完全没有理由使用startActivityForResult()
for createChooser()
- 您可以在调用后立即使用startActivity
和运行您的代码:onActivityResult()
startActivity
Intent intent = new Intent(Intent.ACTION_VIEW, externalUrl); // Uri
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent chooserIntent = Intent.createChooser(intent, "Open URL...");
startActivity(chooserIntent);
// Do your code from onActivityResult() here
但是,如果你真的想使用 Activity Result API,那么你可以直接改编文档中的示例,将示例GetContent
合约替换为StartActivityForResult
合约:
// Create this as a variable in your Fragment class
ActivityResultLauncher<Intent> mLauncher = registerForActivityResult(
new StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
// Do your code from onActivityResult
}
});
private void triggerChooser(Uri externalUri) {
Intent intent = new Intent(Intent.ACTION_VIEW, externalUrl); // Uri
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent chooserIntent = Intent.createChooser(intent, "Open URL...");
mLauncher.launch(chooserIntent);
}
推荐阅读
- google-apps-script - 传递文本框变量以查询 Google 表格
- javascript - React hook useEffect 依赖数组
- javascript - 带有 for in 循环的 if 语句中的 && 运算符未给出正确答案
- javascript - 有条件地使用对象属性
- flutter - 如何使 ClipRRect 中的 Container 调整为子文本大小
- android - Cordova 相机插件 PhotoLibrary Android
- javascript - 无法在弹出框中包含选择字段
- database - 如何将 ER 图 1:1:N 三元关系转换为 Relational Schema
- deep-learning - 微调ssd mobilenet
- excel - 我可以根据不同单元格的值确定公式中文件路径的一部分吗?