Android 当应用程序进入后台时,通知将显示上一个通知的内容

Android 当应用程序进入后台时,通知将显示上一个通知的内容,android,android-activity,push-notification,inappbrowser,Android,Android Activity,Push Notification,Inappbrowser,我在活动ViewInWeb中实现了应用程序内浏览器。我使用此活动打开应用程序内部的新闻。我还使用此活动打开包含链接的推送通知。但出现了以下问题: 我在ViewInWeb 我按下home按钮,应用程序进入后台 我收到一个包含链接的通知 当我打开通知时,它不会显示此通知中的内容,但会显示我按下“主页”按钮之前的内容 打开通知时,我使用以下代码: Intent resultIntent; PendingIntent resultPendi

我在活动
ViewInWeb
中实现了应用程序内浏览器。我使用此
活动
打开应用程序内部的新闻。我还使用此活动打开包含链接的推送通知。但出现了以下问题:

  • 我在
    ViewInWeb

  • 我按下home按钮,应用程序进入后台

  • 我收到一个包含链接的通知

  • 当我打开通知时,它不会显示此通知中的内容,但会显示我按下“主页”按钮之前的内容

  • 打开通知时,我使用以下代码:

                    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);
        }
    
    
    }
    
    公共类ViewInWeb扩展了AppCompative活动{
    私有网络视图;
    ProgressBar ProgressBar;
    私有字符串链接,标题;
    私有字符串url\u链接,url\u标题;
    私有整数计数=1;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u视图在web中);
    webView=(webView)findViewById(R.id.browser\u web\u view);
    //启用后退按钮
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_black);
    getSupportActionBar().setElevation(0);
    WebSettings WebSettings=webView.getSettings();
    setJavaScriptEnabled(true);
    setWebViewClient(新的WebViewClient(){
    @凌驾
    公共void onPageFinished(WebView视图,字符串url){
    .
    .
    //谷歌分析追踪代码
    .
    }
    计数++;
    }
    });
    //获取数据
    Bundle basket_category=getIntent().getExtras();
    link=basket\u category.getString(TimeUtils.TAG\u link);
    title=basket\u category.getString(TimeUtils.TAG\u title);
    int type=basket_category.getInt(“type”);
    如果(类型==1){
    .
    .
    //谷歌分析追踪代码
    .
    }
    url_link=链接;
    url_title=标题;
    //把数据
    getSupportActionBar().setTitle(标题);
    loadUrl(链接);
    //创建新的ProgressBar并设置其样式
    final ProgressBar ProgressBar=新的ProgressBar(this,null,android.R.attr.progressBarStyleHorizontal);
    progressBar.setLayoutParams(新的ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,25));
    //检索应用程序的俯视图
    最终FrameLayout decorView=(FrameLayout)getWindow().getDecorView();
    decorView.addView(progressBar);
    ViewTreeObserver observer=progressBar.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(新的ViewTreeObserver.OnGlobalLayoutListener(){
    @凌驾
    公共图书馆{
    View contentView=decorView.findviewbyd(android.R.id.content);
    //progressBar.offsetTopAndBottom(contentView.getBottom()-10);
    float x=contentView.getBottom();
    int结果=0;
    int resourceId=getResources().getIdentifier(“status\u bar\u height”、“dimen”、“android”);
    如果(资源ID>0){
    结果=getResources().getDimensionPixelSize(resourceId);
    }
    Log.e(“aggbfaevfsa”,String.valueOf(x));
    setY(contentView.getY()+结果-10);
    //progressBar.setX(0);
    ViewTreeObserver observer=progressBar.getViewTreeObserver();
    观察者:RemoveGlobalayOutliner(本);
    }
    });
    setWebView.WebChromeClient(新WebChromeClient(){
    //页面加载进度,完全加载时消失
    public void onProgressChanged(WebView视图,int-progress){
    如果(进度<100&&progressBar.getVisibility()==progressBar.GONE){
    progressBar.setVisibility(progressBar.VISIBLE);
    }
    progressBar.setProgress(进度);
    如果(进度==100){
    progressBar.setVisibility(progressBar.GONE);
    }
    }
    @凌驾
    接收到的标题上的公共无效(WebView视图,字符串标题){
    super.onReceivedTitle(视图、标题);
    如果(!TextUtils.isEmpty(title)){
    getSupportActionBar().setTitle(标题);
    url_link=view.getUrl();
    url_title=标题;
    }
    }
    });
    //在打开“活动”时设置动画
    覆盖翻译(R.anim.activity\u open\u translate,
    R.动物活动(接近量表);
    }
    //在关闭活动时设置动画
    @凌驾
    受保护的void onPause(){
    super.onPause();
    //关闭过渡动画
    覆盖过渡(R.anim.activity\u open\u scale,
    R.anim.activity\u close\u translate);
    }
    }
    
    当应用程序中出现两个通知时,也会出现同样的问题。打开第一个后,我按home(主页)按钮。当我按下第二个按钮时,它会显示第一个按钮的内容


    有没有办法解决这个问题。

    问题是,一旦应用程序在后台运行,可能就不会调用
    onCreate()
    (它的活动可能还没有被销毁)

    下面是您可以在
    ViewInWeb
    活动中执行的操作,而不是在
    onCreate()
    中处理新的意图:

    注意!如果您使用片段,它建议您处理intent fro
    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);
        }
    }