1

Я реализовал браузер в приложении в действии ViewInWeb. Я использую это activity, чтобы открывать новости внутри приложения. Я также использую эту активность для открытия push-уведомлений, содержащих ссылки. Но возникает следующая проблема:Отображение содержимого уведомлений из предыдущего уведомления, когда приложение идет в фоновом режиме

  1. открыть ссылку из приложения в ViewInWeb

  2. жму кнопку домой, чтобы приложение идет в фоновом режиме

  3. я получаю уведомление, содержащее ссылку ,

  4. Когда я открываю уведомление, он не отображает содержимое этого уведомления, но отображает содержимое, которое было до того, как я нажал кнопку «Главная».

Когда я открываю уведомление, я использую следующий код:

   Intent resultIntent; 
       PendingIntent resultPendingIntent = null; 

       resultIntent =new Intent(this, ViewInWeb.class); 
       Bundle basket = new Bundle(); 
       basket.putString(TimeUtils.TAG_LINK,link); 
       basket.putString(TimeUtils.TAG_TITLE,title); 
       basket.putInt("TYPE", 1); 
       resultIntent.putExtras(basket); 

       resultPendingIntent = PendingIntent.getActivity(this, Integer.parseInt(nr), 
         resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Код для ViewInWeb, как показано ниже:

public class ViewInWeb extends AppCompatActivity { 

    private WebView webView; 
    ProgressBar progressBar; 
    private String link, title; 
    private String url_link, url_title; 
    private int count = 1; 

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

     webView = (WebView) findViewById(R.id.browser_web_view); 

     // enable back button 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_black); 
     getSupportActionBar().setElevation(0); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setJavaScriptEnabled(true); 


     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       . 
       . 
      //code for Google Analytics tracking 
       . 
       } 
       count++; 
      } 
     }); 

     //get the data 
     Bundle basket_category = getIntent().getExtras(); 
     link = basket_category.getString(TimeUtils.TAG_LINK); 
     title = basket_category.getString(TimeUtils.TAG_TITLE); 
     int type = basket_category.getInt("TYPE"); 
     if(type==1){ 

       . 
       . 
      //code for Google Analytics tracking 
       . 
     } 
     url_link = link; 
     url_title = title; 

     //put the data 
     getSupportActionBar().setTitle(title); 
     webView.loadUrl(link); 

     // create new ProgressBar and style it 
     final ProgressBar progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 

     progressBar.setLayoutParams(new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, 25)); 

     // retrieve the top view of our application 
     final FrameLayout decorView = (FrameLayout) getWindow().getDecorView(); 
     decorView.addView(progressBar); 

     ViewTreeObserver observer = progressBar.getViewTreeObserver(); 
     observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       View contentView = decorView.findViewById(android.R.id.content); 
       //progressBar.offsetTopAndBottom(contentView.getBottom()-10); 
       float x = contentView.getBottom(); 

       int result = 0; 
       int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); 
       if (resourceId > 0) { 
        result = getResources().getDimensionPixelSize(resourceId); 
       } 

       Log.e("aggbfaevfsa", String.valueOf(x)); 
       progressBar.setY(contentView.getY() + result - 10); 
       // progressBar.setX(0); 

       ViewTreeObserver observer = progressBar.getViewTreeObserver(); 
       observer.removeGlobalOnLayoutListener(this); 
      } 
     }); 


     webView.setWebChromeClient(new WebChromeClient() { 

      // page loading progress, gone when fully loaded 
      public void onProgressChanged(WebView view, int progress) { 
       if (progress < 100 && progressBar.getVisibility() == ProgressBar.GONE) { 
        progressBar.setVisibility(ProgressBar.VISIBLE); 
       } 
       progressBar.setProgress(progress); 
       if (progress == 100) { 
        progressBar.setVisibility(ProgressBar.GONE); 
       } 
      } 

      @Override 
      public void onReceivedTitle(WebView view, String title) { 
       super.onReceivedTitle(view, title); 
       if (!TextUtils.isEmpty(title)) { 
        getSupportActionBar().setTitle(title); 
        url_link = view.getUrl(); 
        url_title = title; 
       } 
      } 
     }); 
     // set the animation when opening the activity 
     overridePendingTransition(R.anim.activity_open_translate, 
       R.anim.activity_close_scale); 

    } 

    // set the animation when closing the activity 
    @Override 
    protected void onPause() { 
     super.onPause(); 
     // closing transition animations 
     overridePendingTransition(R.anim.activity_open_scale, 
       R.anim.activity_close_translate); 
    } 


} 

Та же проблема происходит, когда два уведомления приходят приложение. После того, как я открыл первый, я нажимаю кнопку «домой». Когда я нажимаю второй, он отображает содержимое первого.

Любая идея, как решить проблему.

+0

вы использовали метод getIntent и получить ссылку сформировать намерение и попытаться использовать OnPause и onResume methods- опубликовать полный исходный код ViewinWeb –

ответ

0

Проблема в том, что onCreate() не может быть вызван, как только приложение в фоновом режиме (его действие еще не уничтожено).

Итак, вот что вы можете сделать в вашей ViewInWeb деятельности вместо того, чтобы обрабатывать новое намерение в onCreate():

public class ViewInWeb extends AppCompatActivity { 
    ...... 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     .... 
     //initialize your widgets, as you did, but don't start loading data 
    } 

    @Override 
    protected void onNewIntent(Intent intent) { 
     super.onNewIntent(intent); 
     setIntent(intent); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     handleIntent(); 
    } 

    private void handleIntent() { 
     // handle intent here! 

     Bundle basket_category = getIntent().getExtras(); 
     link = basket_category.getString(TimeUtils.TAG_LINK); 
     title = basket_category.getString(TimeUtils.TAG_TITLE); 
     int type = basket_category.getInt("TYPE"); 
     if(type==1){ 
      //code for Google Analytics tracking 
     } 
     url_link = link; 
     url_title = title; 
     //put the data 
     getSupportActionBar().setTitle(title); 
     webView.loadUrl(link); 
    } 
} 

NB! Если вы используете фрагменты, он рекомендует обрабатывать умысел protected void onResumeFragments() метода вместо простого onResume()

Я надеюсь, что это помогает