在这里有点困惑,因为通常我们想从任何外部应用程序打开我们的应用程序,但在我的情况下,我需要做相反的事情——通过用户点击我应用程序内的 url 打开外部应用程序(如果已安装) (它可以是任何视图)。
现在.. 首先是第一 - 我觉得这应该被归类为深度链接方法,即使方向相反(如果我在这里错了请纠正我)。此外,我希望有一个在应用程序中的任何位置触发的解决方案(例如,如果动态内容来自服务器端并且它包含文本 + url)。因此,在这种情况下,在按钮/链接上设置一个简单的点击监听器并不能解决问题。
我想要实现的目标:每当用户在应用程序中的任何位置单击 tiktok url 时,如果安装了 tiktok 应用程序,则应将其打开。
所以,我开始实施深层链接:
<activity
android:name="com.example.myapp.MainActivity"
android:exported="true"
android:launchMode="singleInstance"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="www.tiktok.com" />
</intent-filter>
</activity>
我本来希望这会触发
onNewIntent(intent: Intent?)
里面的MainActivity
。这不是我得到的。我是不是看错了这个问题?如果不是,我缺少哪一部分?
从 Android 12 开始,谷歌只允许在外部应用程序中打开“验证链接”。经过验证的链接允许应用程序开发人员确保只有他们的应用程序可以处理来自他们域的链接。如果链接未经验证,Android 12 将在默认浏览器中打开它,而不是向您显示应用选择对话框。但值得庆幸的是,有一个名为 Better Open With 的应用程序可以让你绕过 Android 12 的新链接处理行为。 阅读更多 同样对于较低的 android 版本,你可以这样做,你的第二个意图过滤器是多余的。
private void openLink(String url){
Uri parsedUri = Uri.parse(url);
Intent browseIntent = new Intent(Intent.ACTION_VIEW).setData(parsedUri);
browseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Context context;
if (mActivity != null && mActivity.get() != null) {
context = mActivity.get().getBaseContext();
} else {
context = getContext();
}
context.startActivity(browseIntent);
}
为了让您更好地理解Hosein的回答,打开另一个应用程序的唯一方法是使用
Intent(Intent.ACTION_VIEW)
。 Tiktok 的开发人员(在您的情况下)拥有与您的网址相关的深层链接。即使他们已经实现了它们,用户也可以为所有链接设置一个浏览器。因此,由于您无法控制这些情况,并非所有用例都会使 Tiktok 启动。