0

私はAndroidアプリを構築しています。その機能の1つは、その中にサイトを開いていることと、 Chrome搭載デスクトップの一部のサイトのアイコン。 しかし、あなたは、プログレッシブウェブアプリのために、それをブラウザの1つのインスタンスでそれぞれ開き、私は自分のアプリでまったく同じことをしたいと思います。そこにISN場合にのみ、それは新しいタスクを開くことが」私は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); 

この方法で、それは新しいタスク私はショートカットが、私が本当に必要をクリックするたびに開きます

この

は、ショートカットの目的でありますそのサイトをバックグラウンドで実行しているタスク。

これを検出して回避策を見つけて、バックグラウンドからタスクを開くか、新しいタスクを起動するにはどうすればよいですか?

+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; 
    } 
} 
関連する問題