1. 程式人生 > >Intent隱式跳轉及引數傳遞

Intent隱式跳轉及引數傳遞

簡單來說intent隱式跳轉就是用action開啟activity,server,broadcast。intent傳遞引數的方式有兩種,一種是大家熟悉的extra,鍵值對的形式,直接傳遞引數;另一種就是uri的方式,String str = "content://com.android.test?username=merlin&password=123456"; Uri uri = Uri.parse(str); Intent intent = new Intent(Intent.ACTION_VIEW,uri); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent); intent構造方法裡的兩個引數一個action,一個uri 。還要設定category。好了這些跳轉的工作做完了那麼就好看看如何接受了。首先接受方要在manifest檔案裡設定過濾器,來判斷是不是要發給我的intent。 <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:host="com.android.test" android:scheme="content" /> </intent-filter>我們來看一下這個過濾器 首先
action category就是之前說過的傳遞的時候設定的 host就是str裡冒號雙斜槓前邊的那個內容,host呢就是就是scheme和?中間的那部分當然還有port和path,這裡就不說了 android.developer.com裡會有詳細介紹。在activity裡獲取uri然後判斷host和scheme是不是我們想要的然後獲取username和password具體獲取方法是 String username = uri.getQueryParameter("username");獲取host直接可以呼叫 uri.getHost()方法。獲取完成之後可以執行想要做的操作。
String str = "meixian://com.meixian.shopkeeper?action=login&phone=1234&from=meixian_crm"
; Uri uri = Uri.parse(str); Intent intent = new Intent(Intent.ACTION_VIEW,uri); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent);

這是接收的原始碼
Uri uri = getIntent().getData();
if (uri !=null ){
    String host = uri.getHost();
String scheme  = uri.getScheme();
String param = uri.getQueryParameter("action"
); if ("login".equals(param)){ String phone = uri.getQueryParameter("phone"); String from = uri.getQueryParameter("from"); textView.setText(phone+from); startActivity(new Intent(this,MainActivity.class).putExtra("name",phone+from)); } }