Android使用scheme方式唤醒处于后台时的App场景
场景:甲App唤醒处于后台时的乙App的目标界面,且乙App的目标界面处于最上层,即已经打开状态,要求甲App使用scheme唤醒乙App时,如从桌面icon拉起App效果一致。
一、方式一
1、甲App跳转intent配置如下:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("schemeurltest://hostdemo"));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
startActivity(intent);
其中schemeurltest://hostdemo为乙App的目标界面scheme地址;
其中intent必须添加 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
2、乙App的目标界面Activity清单文件设置如下:
<activity android:name="com.xxx.yyy.TestActivity"android:exported="true"android:theme="@style/TransparentDialog"android:screenOrientation="behind"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /><data android:scheme="schemeurltest"android:host="hosttest"/></intent-filter>
</activity>
注意这里不用配置启动模式 android:launchMode=""
二、方式二
1、甲App跳转intent配置如下:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("schemeurltest://hostdemo"));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);
其中 schemeurltest://hostdemo 为乙App的目标界面scheme地址;
其中intent必须添加 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
2、乙App的目标界面Activity清单文件设置如下:
<activity android:name="com.xxx.yyy.TestActivity"android:exported="true"android:theme="@style/TransparentDialog"android:launchMode="singleTask"android:screenOrientation="behind"><intent-filter><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><action android:name="android.intent.action.VIEW" /><data android:scheme="schemeurltest"android:host="hosttest"/></intent-filter>
</activity>
注意这里启动模式必须配置为:android:launchMode="singleTask"
三、两种方式的区别
方式一,当启动intent设置为:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED),可以不用设置启动App目标界面Activity的启动模式。
方式二,启动intent设置为:intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET),需要设置启动App目标界面Activity的启动模式为:android:launchMode="singleTask"。