Запуск кода при изменении URL (пользовательская схема) без запуска нового действия - PullRequest
1 голос
/ 23 января 2012

Я настроил собственную схему URL для своего приложения, используя фильтры намерений. Когда в моем WebView URL-адрес изменяется на мою пользовательскую схему (mockup: // pagechange), фильтр намерений правильно фильтрует намерение моего приложения, запуская новый экземпляр моей деятельности. Однако я хочу, чтобы фильтр намерений выполнял часть кода внутри существующего действия, а не запускал новое действие. Возможно ли это, и если да, то как мне это настроить? Если нет, то есть ли другие идеи о том, как выполнить задачу запуска кода, когда URL-адрес в моем WebView изменится на что-либо, начинающееся с 'mockup'?

Я пытался использовать другие действия в фильтре намерений, но те, которые я пробовал (RUN и ATTACH_DATA), приводят к отображению страницы «Веб-страница недоступна» в моем WebView при изменении URL-адреса. Кроме того, все вопросы о фильтре намерений / пользовательских схемах, которые я нашел здесь, связаны с выяснением того, как начать новое действие с помощью URL-адреса с пользовательской схемой, что затрудняет поиск противоположного.

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 января 2012

Я закончил тем, что отошел от шаблона фильтра намерений - я уже настроил WebViewClient для своего WebView для обработки загрузки внешних ссылок в моем WebView, поэтому я просто установил там флаг, чтобы запустить мой код, если URL-адрес, который являетсязагружается содержит пользовательскую схему, которую я ищу:

WebView wv = (WebView) findViewById(R.id.app_container);
// [other setup]
wv.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        {
            if(!url.contains("mockup://"))
                view.loadUrl(url);
            else {
                // run "mockup"-specific code
            }
            return true;
        }
    });
1 голос
/ 23 января 2012

Сначала добавьте android:launchMode="singleTop" декларацию вашей активности в манифест. В вашем намерении используйте флаги FLAG_ACTIVITY_CLEAR_TOP. Вы получите намерение в обратном вызове onNewIntent ().

Помните, что намерение, доставленное в onNewIntent (), не совпадает с возвращаемым в getIntent (). Если вы используете getIntent () в других частях вашего кода, используйте setIntent для намерения onNewIntent ().

...