2013年3月14日 星期四

[Android] Call an existed app from url 從網址連自己的app

<activity android:name=".MyActivity">
    <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="myapp" android:host="path" android:pathPrefix="/pathPrefix_1/pathPrefix_2/" />
    </intent-filter>
</activity>
在AndroidManifest.xml裡想要跳轉的那一頁(Activity),
裡面加上2~8行的<intent-filter>
就可以從網頁,或者網址Url直接連到自己的app。

三到六行,主要是讓app能夠被看被打開,
比較重要的是第六行:
<data android:scheme="myapp" android:host="path" android:pathPrefix="/pathPrefix_1/pathPrefix_2/" />
點下或輸入網址 myapp://path/pathPrefix_1/pathPrefix_2/ 就可以連到app中MyActivity.java那一頁,
myapp://path/pathPrefix_1/pathPrefix_2/blablabla 也可以,
myapp://path/pathPrefix_1/pathPrefix_2/?user=abc 也可以,
後面的字串或query參數需要的話,在程式中可以自行parse。

android:pathPrefix
這個參數是不一定需要的,多長可以自己定義。
如果只給
android:scheme="myapp" android:host="path"
則 myapp://path 或 myapp://path/ 或 myapp://path/blablabla 都連得到,
但 myapp://path.bla 就連不到。

用這樣的方式進入Activity,會收到intent,
而parse方式如下:
get url data:
ex: myapp://path.com/pathPrefix/1234
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "myapp"
String host = data.getHost(); // "path.com"
List params = data.getPathSegments();
String first = params.get(0); // "pathPrefix"
String second = params.get(1); // "1234"


要注意的是,
如果想拿到不只是網址,還包括參數(queryString)
就要使用
String data = intent.getDataString()
而非
Uri data = getIntent().getData();
然後自行parse。

沒有留言:

張貼留言