当前位置: 首页 > 知识库问答 >
问题:

当打开外部URL时,“片段中的startActivityForResult(Intent,int)已被弃用”的Java解决方案?

芮念
2023-03-14

我的应用程序包含一个用于打开外部网页的简单片段,包括:

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

当结果返回时(在我的片段的onActivityResult(…) ),碎片从背面弹出。

但是,我现在得到了新的反对警告:

片段中的starActivityForResult(Intent, int)已被弃用

我读过相应的从活动留档中获取结果,但我不确定如何调整他们为我的特定情况提供的示例。

我发现了ActivityResultContracts。StartActivityForResult类,但不知道如何将我的ChooseContent传递给它。

这门课的所有在线示例似乎都是静态编程语言,我没有任何乐趣试图反编译它们以Java。因此,一个Java的例子,说明如何使用新的寄存器ForActivityResult()方法打开外部网址将非常受欢迎。


共有2个答案

齐栋
2023-03-14

下面的答案可能对某人有所帮助。。。。但这并不是上述问题的现成解决方案。

当我试图从活动中获得结果时,我遇到了很多问题。最后我找到了下面的解决方案。

在这个片段中,我创建了ActivityResultLauncher。

var myActivityResultLauncher: ActivityResultLauncher<Intent> = registerForActivityResult<Intent, ActivityResult>(
        ActivityResultContracts.StartActivityForResult(),
        ActivityResultCallback<ActivityResult> {
            // ToDO: 
            if (it.resultCode == AppCompatActivity.RESULT_OK) {

            }
        }
) as ActivityResultLauncher<Intent>

当我开始活动时,我使用下面的代码。

myActivityResultLauncher.launch(myIntent)
夏法
2023-03-14

对于createChooser(),根本没有理由使用startActivityForResult()——您可以在调用startActivity后立即使用startActivity并从onActivityResult()运行代码

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);
}
 类似资料: