如何在我的应用程序中正确处理自定义URL方案(避免多次处理)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在我的应用程序中正确处理自定义URL方案(避免多次处理)?相关的知识,希望对你有一定的参考价值。
我在android 4+应用中添加了自定义网址方案,以便能够深入链接到某些视图/活动:
// AndroidManifest.xml
...
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<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="myapp"/>
<data android:host="webservice"/>
</intent-filter>
</activity>
// MainActivity
protected void onCreate(Bundle savedInstanceState) {
Intent intent = getIntent();
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri.getScheme().equalsIgnoreCase("myapp") && uri.getHost().equalsIgnoreCase("webservice")) {
Intent settingsIntent = new Intent(MainActivity.this, WebServiceSettingsActivity.class);
startActivity(settingsIntent);
}
}
}
这很好用,当使用像myapp://webservice/something
这样的链接时,我的应用程序是startet并且显示了WebServiceSettingsActivity
。
但是:当按下后退按钮时,再次显示WebServiceSettingsActivity
。似乎MainActivity
与之前的意图重新开始,因此再次显示设置......
这可以无限期地重复。怎么解决这个?
你的MainActivity
正在打开你的WebServiceSettingsActivity
,但你永远不会完成前者。这有两个选择:
- 在致电
this.finish();
后立即致电startActivity(settingsIntent);
这将终止您的MainActivity,以便在完成WebServiceSettingsActivity后无需返回任何内容。
2(更好)。使用startActivityForResult()
而不是startActivity()
打开WebServiceSettingsActivity,并且当且仅当从WebServiceSettingsActivity返回时才完成MainActivity:
private static final int REQUEST_CODE_WEB = 1;
public void onCreate(Bundle savedInstance) {
...
if (...) {
startActivityForResult(settingsIntent, REQUEST_CODE_WEB);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE_WEB) {
finish(); // Or do whatever you want, such as load your main content
}
}
以上是关于如何在我的应用程序中正确处理自定义URL方案(避免多次处理)?的主要内容,如果未能解决你的问题,请参考以下文章
使用 UIStoryBoard 基于自定义 URL 方案处理屏幕
在 Xcode 中,如何在我的项目设置中指定正确的库以避免链接错误?
iOS 9.3.2 自定义 URL 方案未从 Safari 启动应用程序