0

Ich baue eine Android-App und eine seiner Funktionen ist, dass es Websites darin öffnet und meine App erlaubt dem Benutzer, Symbole für diese Seiten zu erstellen, genau wie beim Hinzufügen ein Symbol für eine Website auf Ihrem Desktop mit Chrome. Aber wenn Sie es mit Chrome für progressive Web-App tun, öffnet es sie jeweils in einer Instanz des Browsers und ich möchte genau das gleiche mit meiner eigenen App tun.Wie öffne ich mehrere Instanzen meiner Android-App

Dies ist die Absicht für die Verknüpfung:

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); 

Auf diese Weise, es ist eine neue Aufgabe, die ich eine Verknüpfung klicken jedes Mal öffnen, aber was ich wirklich brauchen, wenn, dass es nur eine neue Aufgabe öffnet, wenn es ‚isn t irgendeine Aufgabe, die diese Seite im Hintergrund ausführt.

Wie kann ich dies erkennen und umgehen, um die Aufgabe aus dem Hintergrund zu öffnen oder eine neue Aufgabe zu starten?

+0

können Sie es nicht tun. Sie können verschiedene Aktivitäten öffnen –

+0

Auch hier macht Chrome genau das, was ich mit Progressive Web-Apps-Shortcuts zu tun versuche. Ist es eine private Funktionalität, die Google nur seinen Apps zur Verfügung stellt? –

Antwort

1

Ich habe einen Weg gefunden, es zu tun. Ich habe eine Aktivität erstellt, um das Problem zu lösen, indem ich auf die Hintergrundaufgaben und die Basisabsichten nach einem Parameter für Extras schaue. Diese Aktivität hat kein XML. Es wird nur an den richtigen Ort weitergeleitet. Hier ist der Code:

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; 
    } 
} 
Verwandte Themen