Android uygulamamı açmak için tarayıcıdan bağlantılara müdahale etmek


107

Tarayıcının açmasına izin vermek yerine, kullanıcı belirli bir modelin URL'sini tıkladığında uygulamamdan bir bağlantı açmasını isteyebilmek istiyorum. Bu, kullanıcı tarayıcıdaki bir web sayfasında veya bir e-posta istemcisinde veya yeni basılmış bir uygulamada bir Web Görünümü içinde olduğunda olabilir.

Örneğin, telefonun herhangi bir yerinden bir YouTube bağlantısını tıkladığınızda YouTube uygulamasını açma şansınız olacak.

Bunu kendi uygulamam için nasıl başarabilirim?


Yanıtlar:


141

Kategori bir android.intent.action.VIEW kullanın android.intent.category.BROWSABLE .

Romain Guy'ın Photostream uygulamasının AndroidManifest.xml'sinden ,

    <activity
        android:name=".PhotostreamActivity"
        android:label="@string/application_name">

        <!-- ... -->            

        <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="flickr.com"
                  android:pathPrefix="/photos/" />
            <data android:scheme="http"
                  android:host="www.flickr.com"
                  android:pathPrefix="/photos/" />
        </intent-filter>
    </activity>

Aktiviteye girdikten sonra , eylemi aramanız ve ardından size verilen URL ile bir şeyler yapmanız gerekir. Intent.getData()Yöntem size bir Uri verir.

    final Intent intent = getIntent();
    final String action = intent.getAction();

    if (Intent.ACTION_VIEW.equals(action)) {
        final List<String> segments = intent.getData().getPathSegments();
        if (segments.size() > 1) {
            mUsername = segments.get(1);
        }
    }

Bununla birlikte, bu uygulamanın biraz (1.2) güncelliğini yitirdiği unutulmamalıdır, bu nedenle bunu başarmanın daha iyi yolları olduğunu görebilirsiniz.


8
Dikkat etmeniz gereken bir şey var - tek yapmanız gereken uygulamanızı bir işleyici olarak kaydettirmek olduğundan, kullanıcınıza uygun uygulamayı kullanma seçeneği sunulacak. Şahsen (kullanıcı olarak) "varsayılan eylemi" seçebileceğimi fark
etsem

1
Bu, HTC Telefonlar için çalışmaz. HTC telefonlarda çalışmasını nasıl sağlayabilirim?
user484691

57
Sorgu dizesini içeren tam URL'yi önemsiyorsanız muhtemelen getData () yerine intent.getDataString () kullanmak isteyeceksiniz. Bu yorum size maliyeti olduğu saatten tasarruf etmenizi sağlayacak ..... :-(
Kenton Price

Bu, kullanıcının herhangi bir uygulamadan gittiği her URL için mi yoksa sadece yerel tarayıcı için mi çağrılacak?
gonzobrains

1
Herhangi bir uygulamadan (Intent.ACTION_VIEW amacını kullanan)
jamesh


0
private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        setUrlparams(url);

        if (url.indexOf("pattern") != -1) {
            // do something
            return false;
        } else {
            view.loadUrl(url);
        }

        return true;
    }

}

4
Teşekkürler. Bu, web görünümüne sahip olduğunuz bağlamda kullanışlıdır. Sorduğum soru, uygulamamın herhangi bir uygulamadaki (ör. Tarayıcı) bir bağlantıya tıklanmasını nasıl sağlayabileceğimdi.
jamesh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.