Как предотвратить запуск startActivity (намерения) 2 экземпляров активности? - PullRequest
0 голосов
/ 24 апреля 2020

Я использую onesignal sdk для запуска действия при уведомлении. Нажмите:

public class MainActivity extends AppCompatActivity {

 // adding webview variable
 private WebView mWebView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // OneSignal Initialization
  OneSignal.startInit(this)
   .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
   .unsubscribeWhenNotificationsAreDisabled(true)
   .init();

  // initializing webview by matching with id in activity_main.xml
  mWebView = (WebView) findViewById(R.id.activity_main_webview);

  // Enable Javascript
  WebSettings webSettings = mWebView.getSettings();
  webSettings.setJavaScriptEnabled(true);


  // Setting up webview & webchrome client
  mWebView.setWebViewClient(new WebViewClient());
  mWebView.setWebChromeClient(new WebChromeClient());

  // if url is passed via onesignal notification as via putextra, open that url else open homepage
  String url = getIntent().getStringExtra("url");
  if (url != null) {
   mWebView.loadUrl(url);
  } else {
   mWebView.loadUrl("https://www.google.com");
  }


  OneSignal.startInit(this).setNotificationOpenedHandler(new OneSignal.NotificationOpenedHandler() {
   @Override
   public void notificationOpened(OSNotificationOpenResult result) {

    JSONObject data = result.notification.payload.additionalData;
    String launchURL;

    if (data != null) {
     launchURL = data.optString("launchURL", null);

     //   Log.d("Debug", "Launch URL: " + launchURL);

     Intent intent = new Intent(getApplicationContext(), MainActivity.class);

     intent.putExtra("url", launchURL);

     startActivity(intent);


    } else {
     Log.d("Debug", result.notification.payload.toJSONObject().toString());

    }
   }
  }).init();


 }

}

При нажатии на уведомление запускается активность моего приложения, а затем действие, инициированное кодом startActivity(intent), с дополнительными данными, введенными с использованием * 1005. * начинается, вызывая 2 экземпляра.

Я попытался добавить флаги FLAG_ACTIVITY_REORDER_TO_FRONT & FLAG_ACTIVITY_CLEAR_TOP, но они запускают только начальное основное действие, действие, инициированное startActivity(intent), не запускается с этими флагами.

Как сделать только 1 экземпляр действия для запуска (тот, который инициируется startActivity(intent)) при нажатии на уведомление?

...