在项目开发中,遇到了一个问题,通过第三方浏览器打开本地app的解决办法;
我们一般都是通过
<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:scheme="caifuapp" /> </intent-filter>配置来启动,但是url启动与在手机桌面启动是打开了多个app,在手机上并不支持一个应用打开多次的情况所以会出现多次重启的情况
解决办法如下:
把主界面的启动模式改为singtask,把启动的activity的启动模式也改成singtask。
配置启动界面的scheme值
在启动界面判断主界面是否已经启动,假如已经启动直接跳过广告界面到达主界面启动需要展示的页面
如果没有,则启动广告业
protected void startAndExit(Intent i) {
Intent intent = new Intent(this, HomepageActivity.class);
if (i != null) {
intent.setData(i.getData());
}
ComponentName cmpName = intent.resolveActivity(getPackageManager());
boolean bIsExist = false;
if (cmpName != null) { // 说明系统中存在这个activity
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> taskInfoList = am.getRunningTasks(10);
// logi(TAG, "---startAndExit---taskInfoList.size:" + taskInfoList.size());
for (ActivityManager.RunningTaskInfo taskInfo : taskInfoList) {
if (taskInfo.baseActivity.equals(cmpName)) { // 说明它已经启动了
bIsExist = true;
break;
}
}
}
if (bIsExist) {
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// intent.putExtra("isExit", (Boolean) true); //让它自行关闭
this.startActivity(intent);
} else {
Intent intent1 = new Intent(SplashActivity.this, StartActivity.class);
if (i != null) {
intent1.setData(i.getData());
}
startActivity(intent1);
}
}
如果某个Activity的运行模式被设置为singleTask或singleInstance,再次启动它,会触发它的onNewIntent方法。
@Override protected void onNewIntent(Intent intent) { startAndExit(intent); finish(); super.onNewIntent(intent); }
@Override
protected void onNewIntent(Intent intent) {
logi(TAG, "---onNewIntent---");
super.onNewIntent(intent);
if (intent.getBooleanExtra("isExit", false)) {
finish(); // 自行关闭
}
}