2013-03-19 22 views
9

Mam adres URL, nad którym przeważam w mojej aplikacji na Androida. Kliknięcie linku z wiadomości e-mail na ten link powoduje wyświetlenie okna dialogowego Intent Chooser ("Zakończ to za pomocą"). Jednak kliknięcie tego samego linku (w tagu <a>) z Chrome (w Androidzie 4) przekierowuje mnie do tego adresu URL i nie oferuje Intent Chooser.Nadpisanie adresu URL w Androidzie nie działa w przypadku przekierowania

Jeśli zastąpię link w tagu <a> linkiem do Sklepu Google Play (https://play.google.com), kliknięcie linku spowoduje ponowne wyświetlenie numeru Intent Chooser.

Czy jest coś specjalnego w Google Play Store i Chrome, czy też zrobiłem coś nie tak z konfigurowaniem mojego adresu URL? Czy jest coś, co mogę zrobić w html, aby to zadziałało?

Oto <intent-filter>

<activity 
    android:label="@string/app_name" 
    android:name="..." 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN"/> 
     <category android:name="android.intent.category.LAUNCHER"/> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 

     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 

     <data android:scheme="https" 
       android:host="www.example.com" 
      /> 
     <data android:scheme="http" 
       android:host="www.example.com" 
      /> 
    </intent-filter> 
</activity> 

(Przekierowanie do adresu URL również nie pojawi się okno z Intent Chooser, ale pomyślałem, moja sytuacja powyżej bardziej dosadnie wyraża mój problem).

Warto też wspomnieć, że Jestem pewien, że wszystko działało, dopóki moja domena nie działała. Gdy tylko moja domena pojawiła się w Internecie, przestał działać. Może to być wytworem mojej wyobraźni, ponieważ nie byłem w 100% skoncentrowany na tym problemie w tym czasie.

Czy jest możliwe, że Chrome traktuje adresy URL Sklepu Google Play specjalnie, w przeciwnym razie czeka na odpowiedź bez numeru URL z adresu URL przed otwarciem Intent Chooser?

+0

Jakiej wersji Androida używasz? Zastanawiasz się, czy nie ma to związku z tym błędem: https://code.google.com/p/chromium/issues/detail?id=113140 –

+0

To dobre znalezisko. Używam 4.2.2 Znalazłem również ten błąd, który może być powiązany: https://code.google.com/p/chromium/issues/detail?id=170925, ale mój kod był rozbieżny z miejsca, które można łatwo przetestować, ponieważ Musiałem go wyciągnąć za drzwi. Niedługo zrobię test. – xbakesx

+0

@AlexFlorescu, jeśli napiszesz odpowiedź wyjaśniającą, że jest to jeden z tych błędów (opublikowałem również nowy błąd, który nie jest zamknięty: https://code.google.com/p/chromium/issues/detail?id = 230104) Zaznaczę twoją odpowiedź poprawnie. – xbakesx

Odpowiedz

1

Może to być prawdziwy/znany błąd.

Ten zasugerowałem (ale który jest teraz zamknięty więc wydaje się, będzie ustalona dla wersji starasz się): https://code.google.com/p/chromium/issues/detail?id=113140

Znaleziony/otwiera @xbakesk: https://code.google.com/p/chromium/issues/detail?id=170925 https://code.google.com/p/chromium/issues/detail?id=230104

Jeśli znajdziesz jakieś inne błędy, daj mi znać w komentarzach i dodam lub edytuję swoją odpowiedź bezpośrednio. Jeśli błędy zostaną zamknięte, spróbuję również zaktualizować odpowiedź.

0

Nie jestem pewien, czy można dodać więcej niż jeden element danych do filtra zamiaru. Chciałbym użyć dwóch różnych filtrów intencji dla różnych schematów.

Jeśli masz kontrolę nad adresem URL, który znajduje się na stronie internetowej, możesz zmienić http na swój własny niestandardowy protokół, aby Twoja aplikacja się otworzyła zamiast wyświetlać zapytanie w przeglądarce.

+1

Na tej stronie: http://developer.android.com/guide/components/intents-filters.html możesz mieć wiele '', po prostu się łączą, chociaż przyznam się w niezbyt dokładny i udokumentowany sposób. To nie zmienia niczego w opisywanym zachowaniu. Jeśli chodzi o drugi punkt, w moim przypadku wymuszenie http jest wymagane. – xbakesx

2

Pomyślałem o tym całkiem sporo i może być łatwiej po prostu pokazać wam metodę, która działa. Działa to na urządzeniu z 2.3.4 i urządzeniem z 4.2.2, więc myślę, że będzie działać na większości urządzeń.

Oto moja intencja filtr z pliku manifestu:

<intent-filter> 
    <action android:name="android.intent.action.VIEW" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="android.intent.category.BROWSABLE" /> 
    <data android:scheme="http" android:host="realsimpleapps.com" android:pathPrefix="/acv/" /> 
</intent-filter> 

Oto mój plik html:

<a href="http://realsimpleapps.com/acv/aThing">Click Me!</a> 

I w moim Główna działalność Używam tego chwycić cokolwiek mam „aThing” (powyżej) ustaw na:

Uri data = getIntent().getData(); 
if (data != null) { 
    List<String> params = data.getPathSegments(); 
    if (params != null) { 
     Log.d(tag, "Param 0: " + params.get(0)); 
    } 
} 

Wykonaj pracę, a następnie dodaj drugi element danych do filtra zamiaru. Jeśli nadal działa po tym, powinieneś być ustawiony.

Daj nam znać, jak to działa.

db

+0

Wyciągnąłem go do jednego elementu '' i mam dokładnie taką samą sytuację. Kliknięcie linku (poza Chrome) otwiera okno dialogowe Wybór intencji, które oferuje moją aplikację jako rozwiązanie do zamiaru. Jeśli kliknę link z przeglądarki Chrome, nigdy nie pojawi się okno dialogowe Wybór zamiaru, a Chrome po prostu obsługuje adres URL. – xbakesx

Powiązane problemy