我正在尝试在我的应用程序中实现深层链接,我在主要活动的onResume方法中添加了getIntent,并且能够从该链接打开主要活动,但是我面临以下问题。
如果我第一次单击应用程序图标来打开应用程序,则意图操作将为Intent.ACTION_MAIN,这对于所有后续尝试都是恒定的,即当我通过链接,则该intent.action应该是Intent.ACTION_VIEW,但该操作始终是ACTION_MAIN。
如果通过chrome中的链接打开了该应用程序,那么我可以看到我的应用程序的两个实例,即chrome上方和我的应用程序本身。
<activity
android:name=".MainActivity"
android:hardwareAccelerated="false"
android:launchMode="singleTop"> // I used singleTop because i have implementd isTaskRoot in my main activity
<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:host="clip.myapp.tp"
android:pathPattern="/.*"
android:scheme="mhhds" />
</intent-filter>
</activity>
下面是我实现了getIntent的我的mainactivity.java文件的onResume
@Override
protected void onResume() {
super.onResume();
mIntent = getIntent();
String appLinkAction = mIntent.getAction();
if(mIntent.getAction().equals(Intent.ACTION_VIEW)) {
Uri data = mIntent.getData();
String mIntentData = data.toString();
System.out.println("Intentdata:" + mIntentData);
}
}
答案 0 :(得分:1)
这是因为singleTop
不会创建新的活动实例,而总是使用现有活动实例
如果我是第一次点击应用程序图标打开应用程序, 那么intent操作将为Intent.ACTION_MAIN,这将是 所有后续尝试的常量,即当我通过 链接,则intent.action应该是Intent.ACTION_VIEW,但是 操作始终为ACTION_MAIN。
由于上述原因,getIntent
将返回第一次收到的实例,而不是覆盖onNewIntent
,这将返回最新意图的实例,因此请使用onNewItent
而不是{{1 }}
如果通过chrome中的链接打开了应用程序,那么我可以看到两个 我的应用实例,即chrome和我的应用本身
这是因为您的应用程序以前是作为独立应用程序打开的(现在已在堆栈历史记录中),现在已作为搜索结果在chrome中打开,因此这是正常行为。