我已在我的Android 4+应用程序中添加了自定义URL方案,以便能够深度链接到某些视图/活动:
// 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
之类的链接时,我的应用程序启动了,并且显示了WebServiceSettingsActivity
。
但是::按返回按钮时,将再次显示WebServiceSettingsActivity
。看来MainActivity
是按照与以前相同的意图重新启动的,因此设置会再次显示...
这可以无限期地重复。该如何解决?
答案 0 :(得分:0)
您的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
}
}