2010-06-14 17 views
5

Czytałem o zamiarach w Androidzie, ale tutaj jest moje pytanie. Chciałbym uruchomić aplikację na moim telefonie z Androidem, klikając link w przeglądarce internetowej. Przykład: Jeśli link to "mycam: // http://camcorder.com", "mycam: //" działa jak jakiś "tag" do uruchomienia mojej aplikacji, ale chciałbym przekazać "http://camcorder.com" jako ciąg do tej aplikacji na początek.Uruchom aplikację z adresem URL

Pomoc, proszę!

Dzięki!

Odpowiedz

5

istnieje metoda w kodzie aplikacji źródłowej Browser:

public boolean shouldOverrideUrlLoading(WebView view, String url) { ... } 

Po url kliknięciu i nie jest jeszcze zaczynają obciążenia:

  1. zamienia adres URL do intencji

    Intent intent; 
    
    // perform generic parsing of the URI to turn it into an Intent. 
    try { 
        intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); 
    } catch (URISyntaxException ex) { 
        Log.w("Browser", "Bad URI " + url + ": " + ex.getMessage()); 
        return false; 
    } 
    
  2. jeśli nie zaczyna się od rynku: // (lub niektóre predefiniowane schematy), spróbuj startActivityIfNeeded()

    intent.addCategory(Intent.CATEGORY_BROWSABLE); 
    intent.setComponent(null); 
    try { 
        if (startActivityIfNeeded(intent, -1)) { 
         return true; 
        } 
    } catch (ActivityNotFoundException ex) { 
        // ignore the error. If no application can handle the URL, 
        // eg about:blank, assume the browser can handle it. 
    } 
    

Jest to bardzo przydatne informacje! I ponownie odtworzyć sytuację w prosty kodu:

Intent intent = Intent.parseUri("mycam://http://camcorder.com", Intent.URI_INTENT_SCHEME); 
intent.addCategory(Intent.CATEGORY_BROWSABLE); 
intent.setComponent(null); 
System.out.println(intent); 

Wynik będzie dostarczyć wskazówek dla mnie napisać działalność z zamiarem filtra:

 <activity android:name=".MyCamActivity" android:label="@string/app_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="mycam" /> 
      </intent-filter> 
     </activity> 

PS. nie zapomnij o android.intent.category.DEFAUL.

Wreszcie swoją aktywność można wywołać przez mycam: // schemat

+0

Więc wszystko, co muszę zrobić, to stworzyć mój filtr intencji? BTW, oto rzeczywisty link, który będę wykonywać testy z: http://gunitec.com.do/carlos-portes.html "Cam1" jest rzeczywistym linkiem, z którym będę testować. Próbowałem filtra intencji i nie dostałem nic. –

+0

Testuję to dobrze. czy mógłbyś dostarczyć AndroidManifest.xml? – qrtt1

+0

OK, jak mogę Ci to wysłać? Przepraszam za spóźnioną odpowiedź, nie otrzymałem powiadomienia, że ​​odpisałeś. –

4

mycam: // http://camcorder.com nie jest prawidłowy URI, a tworzące systemy to trochę przerażające, jeśli dwie aplikacje wybrać ten sam jeden. Byłoby lepiej, gdybyś zarejestrował swoją aktywność jako program obsługi dla konkretnego identyfikatora URI (na przykład http : //www.example.com/camcorder, zastępując własną domenę oczywiście). Robisz to z <data> tag in your <intent-filter> tag in the AndroidManifest.xml. Gdy użytkownik kliknie link, zostaną one przeniesione do Twojej aplikacji. W ten sposób możesz umieścić tam prawdziwą stronę w sieci, polecając ludziom instalację aplikacji lub cokolwiek innego.

+0

Aplikacja, nad którą pracuję, jest tworzona dla konkretnych wewnętrznych linków na stronie internetowej, a nie dla wszystkich linków. Dlaczego mówisz, że to nie jest prawidłowy identyfikator URI? –

Powiązane problemy