gpt4 book ai didi

android - 如何在单个应用程序中进行多个 BROWSABLE Activity ?

转载 作者:行者123 更新时间:2023-11-30 03:50:02 25 4
gpt4 key购买 nike

我有一个包含 2 个 Activity 的应用程序,它们应该响应 android.intent.action.VIEW。它们的定义类似于 list

<activity android:name=".FirstActivity">
<intent_filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="my_callback1"/>
</intent_filter>
</activity>
<activity android:name=".SecondActivity">
<intent_filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="my_callback2"/>
</intent_filter>
</activity>

my_callback1 由浏览器 Activity 默认启动。是推特授权回调,所以大概是这样的

浏览器被重定向到 url my_callback1://callback?token=0123456789abcdef

my_callback2 由自定义 Linkify 过滤器启动,如下所示:

Linkify.addLinks(textView, pattern, null, matcher, new Linkify.TransformFilter() {
@Override
public String transformUrl(Matcher match, String url) {
return "my_callback2://".concat(url);
}
});

并且两个回调都不起作用,如果 android.intent.category.DEFAULT 没有添加到 intent 过滤器。如果 DEFAULT 被添加到任何一个 intent 过滤器,相应的回调开始正常工作。如果同时设置为两者都没有 - 回调都不起作用(我收到 android.content.ActivityNotFoundException)

最佳答案

对于最初的提问者,我对此的回答有点晚了,但这个特别的问题非常值得回答,但却被误解了。我还努力让多个 Activity 可浏览,以便处理从网页重定向回我的应用程序的不同部分。这在 Android 中基本上不受支持,因为为了使 Activity 可浏览,您还必须将其设置为默认 Activity ,这意味着您不能拥有多个可浏览 Activity 。如果您将多个 Activity 标记为可浏览和默认,则无法创建正确区分的 Intent URI,因为在解压缩 uri 时会忽略组件信息。

但是,当您从浏览器获取 Intent 并使用它们让新的 BrowsableActivity 启动您最初想要启动的 Activity 时,您可以接受参数。浏览器必须点击如下所示的链接:

<a href="intent:#Intent;component=my.app.package/.activity.BrowsableActivity;S.my.app.package.activity.BrowsableActivity.PARAMETER_NAME=activityName;end">

关键是为您的应用创建一个新的 BrowsableActivity。将该 Activity 的 intent-filter 设置为 BROWSABLE,如下所示:

<activity android:name="BrowsableActivity">
<intent_filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent_filter>
</activity>

然后在 Activity 的代码中解压参数:

   @Override
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent()
String otherActivityName = (String) intent.getSerializableExtra(PARAMETER_NAME);
if (otherActivityName == firstOne) {
// create an intent and launch the first activity
} else {
// create an intent and launch the other activity
}
}

现在您可以从可浏览 Activity 中启动任何您想要的 Activity ,如果需要,您也可以将额外的参数传递给该 Activity ,只需将它们从 BrowsableActivity 的 Intent 中解包并将其传递给其他 Activity 即可。

关于android - 如何在单个应用程序中进行多个 BROWSABLE Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com