1. 程式人生 > >從Web連結跳轉到app指定頁面並傳值

從Web連結跳轉到app指定頁面並傳值

在manifest檔案中申明scheme和parentActivity

<activity android:name=".SecondActivity"
            android:parentActivityName=".MainActivity">
            <!--申明parentActivity,使用者按返回鍵後返回主頁面-->
            <!--在Android 4.1版本之後,可以直接使用android:parentActivityName這個屬性來進行指定-->
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <!--下面所設定的值需要和html端對調-->
                <!--在data裡設定了 scheme和host,則該Activity可以接收和處理類似於 "share://article/XXX"的連結-->
                <data
                    android:host="article"
                    android:scheme="share"
                    android:pathPrefix="/attr" />
            </intent-filter>
</activity>

h5跳轉

<a href="[scheme]://[host]/[path]?[query]">啟動應用程式</a> 
示例
<a href="share://article/attr?name=zhangsan&age=26">啟動應用程式</a>  

scheme:判別啟動的App
host:適當記述
path:傳值時必須的key ※沒有也可以
query:獲取值的Key和Value ※沒有也可以

activity中獲取傳遞過來的引數

Intent i_getvalue = getIntent();  
String action = i_getvalue.getAction();  
  
if(Intent.ACTION_VIEW.equals(action)){  
    Uri uri = i_getvalue.getData();  
    if(uri != null){  
        String name = uri.getQueryParameter("name");  
        String age= uri.getQueryParameter("age");  
    }  
}

在二級頁面中對返回鍵做處理

由於是網頁開啟的app指定二級頁面,activity棧中只存在SecondActivity這一個activity,所以當點選返回按鈕的時候,會直接退出當前app。我們希望按返回的時候,回到MainActivity,所以這裡需要處理一下

@Override
public void onBackPressed() {
        //NavUtils.getParentActivityIntent()方法可以獲取到跳轉至父Activity的Intent
        //如果父Activity和當前Activity是在同一個Task中的,則直接呼叫navigateUpTo()方法進行跳轉
        //如果不在同一個Task中的,則需要藉助TaskStackBuilder建立一個新的Task
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            TaskStackBuilder.create(this)
                    .addNextIntentWithParentStack(upIntent)
                    .startActivities();
        } else {
            upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            NavUtils.navigateUpTo(this, upIntent);
        }
        super.onBackPressed();
}