Chặn URL request để mở bằng Android App

Khi viết ứng dụng Android, có thể bạn sẽ gặp phải trường hợp giống mình: nhận biết khi người dùng click vào một đường dẫn để mở đường dẫn đó bằng ứng dụng của mình, thay vì bằng browser. Lấy ví dụ cụ thể hơn:

Google đã đưa ra mạng xã hội Google Plus, kèm theo đó là ứng dụng Google Plus trên Android. Nếu để ý, khi bạn click vào đường link dạng profile của một user thuộc Google Plus (ví dụ: profile của mình trên G+: https://plus.google.com/114902788798240937226), Android sẽ đưa ra hộp thoại, cho phép bạn lựa chọn mở profile đó bằng các browser đã cài sẵn trong máy, hoặc mở bằng ứng dụng Google Plus (tất nhiên là cũng phải được cài sẵn trong máy).

Để làm được việc này, ta sẽ sử dụng Intent, để đăng ký với hệ điều hành rằng ứng dụng của tôi có một activity có khả năng xử lý URL, với một prefix nào đó. Đây là đoạn config trong file AndroidManifest.xml:

<activity android:name=".MyUrlGatewayActivity">
  <intent-filter>
    <action android:name="android.intent.action.VIEW" ></action>
    <category android:name="android.intent.category.DEFAULT" ></category>
    <category android:name="android.intent.category.BROWSABLE" ></category>
    <data android:scheme="http" android:host="www.tonnguyen.com" android:pathPrefix="/" ></data>
  </intent-filter>
</activity>

Việc còn lại là trong MyUrlGatewayActivity, bạn phải lấy ra được đường dẫn mà người dùng đã click vào, bằng method Intent.getData():

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

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

Chúc bạn thành công, hoặc để lại comment nếu bạn có câu hỏi.