Android 如何处理两个活动的相同目的过滤器?
我正在尝试在我的应用程序中实现深度链接。我有两个活动:SplashScreenActivity和MainActivity。这两个活动具有相同的目的过滤器,例如:Android 如何处理两个活动的相同目的过滤器?,android,android-intent,deep-linking,Android,Android Intent,Deep Linking,我正在尝试在我的应用程序中实现深度链接。我有两个活动:SplashScreenActivity和MainActivity。这两个活动具有相同的目的过滤器,例如: <activity android:name="com.example.MainActivity" > <intent-filter> <action android:name="android.intent.action.VIEW" />
<activity
android:name="com.example.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="product"
android:scheme="gg" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity
android:name="com.example.SplashScreenActivity" >
<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="product"
android:scheme="gg" />
</intent-filter>
</activity>
我所做的是:当应用程序已经打开时,我希望触发MainActivity,当应用程序未打开时,我希望触发splashScreenActivity。但是出现一个弹出窗口,希望我选择其中一个活动,我不希望这样。我希望它是自动选择的。那么,我如何实现这一点呢
谢谢在您的情况下,您同时使用Launcher和Default来执行单个活动(SplashScreenActivity),这就是问题所在。根据您的需要,首先检查应用程序是否打开。如果应用程序在此SplashScreenActivity中的setcontentview方法之前已打开,请启动mainActivity。如果应用程序未打开,请启动SplashScreenActivity。希望这能帮助你:)你会面临预期的行为。若你们有两个活动处理相同的意图,你们将面对选择器对话框 从MainActivity中删除
Intent过滤器
,并添加android:launchMode=singleTask
:
<activity
android:name="com.gittigidiyormobil.MainActivity"
android:launchMode=singleTask>
</activity>
<activity
android:name="com.gittigidiyormobil.SplashScreenActivity" >
<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="product"
android:scheme="gg" />
</intent-filter>
</activity>
希望有帮助。->首先,您不希望有多个选项可供选择,这意味着您只需要一个选项。因此,您只需有一个活动来处理此类事件
i、 e:如下所述,您应该在清单文件中具有DeepLinkingActivity
<activity
android:name="com.example.DeepLinkingActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="product"
android:scheme="gg" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity
android:name="com.example.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.SplashScreenActivity" >
<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" />
</intent-filter>
</activity>
<uses-permission android:name="android.permission.GET_TASKS" />
根据上述逻辑,您可以将用户重定向到SplashScreenActivity
或MainActivity
注意:
由于要检索当前正在进行的任务,您需要在清单文件中添加以下权限
<activity
android:name="com.example.DeepLinkingActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<data
android:host="product"
android:scheme="gg" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>
<activity
android:name="com.example.MainActivity" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.example.SplashScreenActivity" >
<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" />
</intent-filter>
</activity>
<uses-permission android:name="android.permission.GET_TASKS" />
谢谢,但是在触发任何活动之前会出现弹出窗口,并说:“使用…”完成操作并强制我选择其中一个,然后启动splashscreen或mainactivity。所以在那之前我不能检查。但是我会从splashscreen中删除默认类别,然后再试一次。谢谢你的回答,我会尝试看看。但只有一件事:根据这种情况,DeepLinkingActivity不应该是launcher活动吗?@bigO:不。当你在launcher
类别中添加任何活动时,这仅仅意味着它将是用户点击你的应用图标时打开的第一个活动。只有当主机产品和方案gg
被触发时,您可能才想打开DeepLinkingActivity
。isAppInForeround对我来说总是返回true,但经过一些修改,我成功地使其工作,因此我接受这一回答。还有一个简单的问题:如果我的应用程序从deeplinking启动,当我按下后退按钮并想退出应用程序时,应用程序会在关闭后立即重新启动。原因可能是什么?@bigO:你到底是如何启动你的应用程序的?我用以下命令从adb启动它:./adb shell am start-W-a android.intent.action.VIEW-d“gg://product/136658071”com.example.mypackagenamanks要知道答案,我会试试看会发生什么