Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何处理两个活动的相同目的过滤器?_Android_Android Intent_Deep Linking - Fatal编程技术网

Android 如何处理两个活动的相同目的过滤器?

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" />

我正在尝试在我的应用程序中实现深度链接。我有两个活动:SplashScreenActivity和MainActivity。这两个活动具有相同的目的过滤器,例如:

<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要知道答案,我会试试看会发生什么