0

我正在構建一個Android應用程序,其功能之一是它打開了它的內部網站,我的應用程序允許用戶爲這些網站創建圖標,就像添加使用Chrome瀏覽器的桌面上的某個網站的圖標。 但是,當您使用Chrome瀏覽器進行漸進式網絡應用程序時,它會在瀏覽器的一個實例中打開它們,我希望使用我自己的應用程序完成相同的操作。我怎樣才能打開我的Android應用程序的多個實例

這是快捷方式的意圖:

Intent shortcutIntent = new Intent(context, WebActivity.class); 
    shortcutIntent.setAction(Intent.ACTION_MAIN); 
    shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName); 
    shortcutIntent.putExtra("app_url", appUrl); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); 
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 

這樣,就打開一個新的任務,每次我點擊一個快捷方式,但我真正需要的,如果它打開了一個新的任務只有當ISN」 t在後臺運行該網站的任何任務。

如何檢測此問題和解決方法以從後臺打開任務或啓動新任務?

+0

你不能這樣做。你可以開啓不同的活動 –

+0

同樣,Chrome也正是我想用漸進網絡應用快捷方式做的。 Google只向其應用提供私人功能嗎? –

回答

1

我想出了一個辦法。我創建了一個活動來管理問題,查看後臺任務及其基本意圖,以獲取額外參數。此活動沒有XML。它只會重定向到正確的位置。 這裏是代碼:

import android.app.Activity; 
import android.app.ActivityManager; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.annotation.RequiresApi; 

public class WebAppManagerActivity extends Activity { 

    private String appUrl; 
    private String appName; 
    private String iconUrl; 

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     appUrl = this.getIntent().getExtras().getString("app_url"); 
     appName = this.getIntent().getExtras().getString("app_name"); 
     iconUrl = this.getIntent().getExtras().getString("icon_url"); 

     ActivityManager.AppTask task = getRunningTask(); 

     if (task != null) { 
      task.moveToFront(); 
     } else { 
      Intent launchActivity = new Intent(getApplicationContext(), WebViewActivity.class); 
      launchActivity.setAction(Intent.ACTION_MAIN); 
      launchActivity.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName); 
      launchActivity.putExtra("app_name", appName); 
      launchActivity.putExtra("app_url", appUrl); 
      launchActivity.putExtra("icon_url", iconUrl); 
      launchActivity.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); 
      launchActivity.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
      WebAppManagerActivity.this.startActivity(launchActivity); 
     } 

     finish(); 
    } 

    private ActivityManager.AppTask getRunningTask() { 

     if(Build.VERSION.SDK_INT < 23) { 
      return null; 
     } 

     ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 

     for (ActivityManager.AppTask task : manager.getAppTasks()) { 
      if (task.getTaskInfo().baseActivity.toString().contains("WebViewActivity") && 
        appUrl.equals(task.getTaskInfo().baseIntent.getExtras().getString("app_url"))) { 

       return task; 
      } 
     } 
     return null; 
    } 
} 
相關問題