我正在尝试在我的应用程序中实现深度链接。我有两个活动: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>
我要做的是:当应用程序已经打开时,我希望主活动被触发,而当应用程序未打开时,我希望SplashScreenActivity被触发。但是一个弹出窗口出现,希望我选择其中一个活动,我不希望这样。我希望它是自动选择的。那么,我该如何实现呢?
谢谢
最佳答案
->首先,你不想有多个选择意味着你只想有一个选择。因此,您应该只有一个Activity
来处理此类事件。
即:如下所述,您应该在清单文件中有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>
->你想根据某些条件来决定下一个流,比如你的应用程序是否在前台,所以只需将逻辑放入
DeepLinkingActivity
中,并确保你没有为该活动设置任何布局文件。即。:
private boolean isAppInForeground(Context ctx) {
ActivityManager activityManager = (ActivityManager) ctx.getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE);
if (services == null) {
return false;
}
if (services.size() > 0 && services.get(0).topActivity.getPackageName().toString().equalsIgnoreCase(ctx.getApplicationContext().getPackageName().toString())) {
return true;
}
return false;
}
基于上述逻辑,您可以将用户重定向到
SplashScreenActivity
或MainActivity
。注:
由于要检索当前正在进行的任务,您需要在清单文件中添加以下权限。
<uses-permission android:name="android.permission.GET_TASKS" />