在項目開發中,遇到了一個問題,通過第三方瀏覽器打開本地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(); // 自行關閉
}
}