我对来自网址的Android intent-filter
有一个非常奇怪的问题。
简而言之:我将活动A视为MAIN& LAUNCHER和活动B具有意图过滤器,允许通过 href =" intent://..." 打开它。活动B将活动A列为父母。
如果我通过点击 href 打开应用,它会直接打开到B(正如预期的那样)。但是,如果我按下(因此我在活动A中)并尝试再次从 href 打开应用程序,它会打开活动A而不是B!这很奇怪,因为活动A除了MAIN和LAUNCHER之外没有任何意图过滤器。
我现在拥有的:
包含活动A和活动B的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.app">
<activity
android:name=".AActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".BActivity"
android:label="@string/app_name"
android:launchMode="singleTop"
android:parentActivityName=".AActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".AActivity" />
<intent-filter>
<data
android:host="m.something.com"
android:path="/somepath"
android:scheme="https" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
我使用的href:
href="intent://m.something.com/somepath#Intent;scheme=https;package=com.my.app;S.extra_string=name@domain.com;end"
活动B代码:
起初,我没有覆盖onOptionsItemSelected
。我想如果我在清单中指定了父活动,那么Android(默认情况下)将打开活动A,但是当我从URL打开活动B并按下时,它关闭了应用程序。因此,我需要执行以下代码。
@Override
public void onCreate(Bundle savedInstanceState) {
setSupportActionBar(...);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
if (isTaskRoot()) {
Intent upIntent = NavUtils.getParentActivityIntent(this);
startActivity(upIntent);
}
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
将活动B中的Z代码分段:
//Code omitted, basically I get the extra_string from the intent
//(from the a href) and processed it here.
现在,这些步骤有效:
但是,这些是导致问题的步骤:
期望:
现实:
我真的不知道这里发生了什么。我试图在SO中搜索类似的问题无济于事。有人遇到过同样的问题吗?