Mencegat tautan dari browser untuk membuka aplikasi Android saya

107

Saya ingin dapat meminta aplikasi saya untuk membuka link saat pengguna mengklik URL dari pola tertentu alih-alih mengizinkan browser untuk membukanya. Ini bisa terjadi saat pengguna berada di halaman web di browser atau di klien email atau dalam WebView di aplikasi yang baru dibuat.

Misalnya, klik tautan YouTube dari mana saja di ponsel dan Anda akan diberi kesempatan untuk membuka aplikasi YouTube.

Bagaimana cara mencapai ini untuk aplikasi saya sendiri?

jamesh
sumber

Jawaban:

141

Gunakan android.intent.action.VIEW dari kategori android.intent.category.BROWSABLE .

Dari aplikasi Romain Guy Photostream AndroidManifest.xml ,

    <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>

Setelah berada di dalam aktivitas , Anda perlu mencari tindakan, dan kemudian melakukan sesuatu dengan URL yang telah Anda terima. The Intent.getData()Metode memberi Anda Uri.

    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);
        }
    }

Perlu dicatat, bagaimanapun, bahwa aplikasi ini sedikit ketinggalan zaman (1.2), jadi Anda mungkin menemukan cara yang lebih baik untuk mencapai ini.

jamesh
sumber
8
Satu hal yang harus diperhatikan - pengguna Anda akan diberikan pilihan untuk menggunakan aplikasi yang sesuai karena yang Anda lakukan hanyalah mendaftarkan aplikasi Anda sebagai penangan. Secara pribadi (sebagai pengguna) saya kesal dengan itu meskipun saya menyadari bahwa saya dapat memilih "tindakan default"
Bostone
1
Ini tidak berfungsi untuk Ponsel HTC. Bagaimana cara membuatnya berfungsi pada ponsel HTC?
pengguna484691
57
Anda mungkin ingin menggunakan intent.getDataString () daripada getData () jika Anda peduli dengan URL lengkap termasuk querystring. Komentar ini akan menghemat waktu saya ..... :-(
Harga Kenton
Apakah ini akan dipanggil untuk setiap URL yang dinavigasi pengguna dari aplikasi apa pun atau hanya browser asli?
gonzobrains
1
Dari aplikasi apa pun (yang menggunakan maksud Intent.ACTION_VIEW)
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;
    }

}
Dacx
sumber
4
Terima kasih. Ini berguna dalam konteks tempat Anda memiliki tampilan web. Pertanyaan yang saya tanyakan adalah bagaimana cara agar aplikasi saya mencegat klik pada tautan di aplikasi apa pun (mis. Browser).
jamesh