загрузить URL-адрес в веб-просмотре из уведомления, пока приложение находится на переднем плане Android - PullRequest
0 голосов
/ 09 января 2019

У меня есть полезная нагрузка с уведомлением, которая отправляет URL-адрес, поэтому, когда пользователь нажимает на уведомление, он открывает мое веб-представление по этому URL-адресу. У меня это отлично работает, когда приложение находится в фоновом режиме.

Для работы с передним планом у меня есть onMessageReceived отправка моего URL в мои намерения

MyFirebaseMessagingService.java

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    super.onMessageReceived(remoteMessage);
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
    String channelId = "Default";
    NotificationCompat.Builder builder = new  NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setBadgeIconType(NotificationCompat.BADGE_ICON_SMALL)
            .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
            .setContentTitle(remoteMessage.getNotification().getTitle()).setAutoCancel(true).setContentIntent(pendingIntent)
            .setContentText(remoteMessage.getNotification().getBody()).setAutoCancel(true).setContentIntent(pendingIntent);
    NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId, "Default channel", NotificationManager.IMPORTANCE_DEFAULT);
        manager.createNotificationChannel(channel);
    }
    manager.notify(0, builder.build());

    if(remoteMessage.getData().size() > 0){
        String url = remoteMessage.getData().get("url");
        if (url != null) {
            intent.putExtra("url", url);
        }
    }
}

Я пытаюсь понять из многих других сообщений здесь, в стеке, как я могу получить это намерение в моей основной деятельности и перезагрузить веб-просмотр с новым URL. Это то, что мне нужно включить в onResume?

Кажется, что в какой-то момент я должен начать свою намеренную деятельность, потому что, если я поставлю startActivity(intent) после моего putextra в моем onMessageReceived, он автоматически установит URL моего веб-просмотра без необходимости нажимать на пользователя. уведомление, когда приходит уведомление , чего я не хочу . Я хочу, чтобы веб-просмотр URL изменился после того, как они нажали на уведомление в системном трее. Так что мне нужно startActivity(intent) в моем MainActivity.java?

intent.putExtra("url", url);
startActivity(intent);

MainActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final WebView webView = (WebView) findViewById(R.id.webview);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient());

    String url = null;
    if(isNetworkAvailable()){
        if(getIntent().getExtras() != null) {
            for (String key : getIntent().getExtras().keySet()) {
                if (key.equals(("url"))) {
                    url = getIntent().getExtras().getString(key);
                }

            }
        }
        if (url != null) {
            webView.loadUrl(url);
        } else {
            webView.loadUrl("https://www.company.com/this/");
        }

        webView.setWebChromeClient(new WebChromeClient() {
            public void onProgressChanged(WebView view, int progress) {
                if (progress == 100) {
                    webView.evaluateJavascript(
                            "(function() { return (document.getElementById('user_id_firebase').innerHTML); })();",
                            new ValueCallback<String>() {
                                @Override
                                public void onReceiveValue(String html) {
                                    html = html.replaceAll("[\"]+", "");
                                    StringTokenizer currentString = new StringTokenizer(html, "|");
                                    final String first = currentString.nextToken().trim();
                                    final String second = currentString.nextToken().trim();
                                    // Write a message to the database
                                    database = FirebaseDatabase.getInstance().getReference();

                                    FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MainActivity.this,  new OnSuccessListener<InstanceIdResult>() {
                                        @Override
                                        public void onSuccess(InstanceIdResult instanceIdResult) {
                                            String newToken = instanceIdResult.getToken();
                                            if (first.equals("gone")) {
                                                database.child("users").child(second).child("android").child(getMacAddr()).setValue("");
                                            } else if (first.equals("none")) {
                                                database.child("users").child(second).child("android").child(getMacAddr()).setValue("");
                                            } else if (first.equals("active")) {
                                                database.child("users").child(second).child("android").child(getMacAddr()).setValue(newToken);
                                            }
                                        }
                                    });

                                }
                            });
                }
            }
        });
    } else {
        webView.loadUrl("file:///android_asset/nointernet.html");
    }
}
...