我的应用程序包含一个用于打开外部网页的简单片段,包括:
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()方法打开外部网址将非常受欢迎。
下面的答案可能对某人有所帮助。。。。但这并不是上述问题的现成解决方案。
当我试图从活动中获得结果时,我遇到了很多问题。最后我找到了下面的解决方案。
在这个片段中,我创建了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)
对于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);
}
我用这个很久了,这个方法现在不推荐了吗?
Android片段中的和有什么区别?在片段中调用时,的行为有什么不同?
我更新了我的应用程序,使用了最新的支持库(23.0.0版),我发现他们不推荐使用Fragment类的onAttach()函数。 而不是: 现在是: 由于我的app使用的是弃用前通过的活动,我认为一个可能的解决方案是: 点击这里查看我几周前打开的bug报告,以及谷歌的人给出的答案。
我想在android studio的firebase上用java语言上传pdf文件,但是最近我发现用来打开活动来选择我们的pdf文件的方法StartActivityForResult()被弃用了,用新的方法代替了,但是很遗憾我没有找到任何方法来使用新的方法来实现上面的目的,请帮助我解决这个问题。谢谢你
我是android新手。只是尝试制作一个webview应用程序,而不是实际的移动应用程序,然后我会将我的flask应用程序用作移动应用程序。 该应用程序运行正常,没有任何问题,但startActivityForResult给了我一个警告。以下是代码:
尝试在和中捕获它,如 并且我在中有。