Android中Scheme跳轉協議

原CSDN博客地址
http://blog.csdn.net/byhook/article/details/51888793

Android中Activity之間的跳轉我們可以直接使用顯示或者隱式意圖跳轉都可以
但是實際開發過程中可能會碰到這類問題
比如App做活動,通過推送過來的消息告訴客戶端跳轉到某某界面,客戶端本地自然不能寫死,不然就麻煩了
今天小結一下開發過程中碰到的這類問題的解決方式:
我們都知道網站都是通過URL的形式訪問的
同樣的我們App也完全可以通過這種方式進行跳轉
舉個小例子

<a href='andy://domain/path?params'>點我試試</a>
   andy為自定義的scheme,固定字符串。

在清單文件中加入IntentFilter

在TextView中顯示


當然這里設置了當前的Activity的啟動模式為singleTask,防止MainActivity重復啟動
然后在MainActivtiy中重寫onNewIntent方法,獲取參數

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null) {
            System.out.println(uri.toString());
        }
    }

斷點可以看到已經有數據傳遞過來了
這個時候我們只需要根據Uri獲取里面的參數然后做相應的動作即可
Uri結構的基本形式

[scheme:][//domain][path][?query][#fragment]  

Uri結構參考http://blog.csdn.net/harvic880925/article/details/44679239

現在我們定義具體的參數
比如我們跳轉的頁面是SchemeActivtiy參數buffer
domain=scheme_activity
buffer=這是個字符串

<a href='andy://scheme_activity?type=0&buffer=這是個字符串'>點我一下</a>
private static final String SCHEME_DOMAIN = "scheme_activity";

private static final String TAG = MainActivity.class.getSimpleName();

相關解析代碼

 @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null) {
            dispatchUri(uri);
        } else {
            Log.e(TAG, "Uri is null");
        }
    }

    private void dispatchUri(Uri uri) {
        try {
            final String domain = uri.getAuthority();
            if (TextUtils.equals(SCHEME_DOMAIN, domain)) {
                final String buffer = uri.getQueryParameter("buffer");
                final int type = Integer.valueOf(uri.getQueryParameter("type"));
                Toast.makeText(this, type + "  " + buffer, Toast.LENGTH_SHORT).show();
            }
        } catch (Exception e) {
            Log.e(TAG, "Uri Parse Error");
        }
    }

點擊測試

完整Demo地址

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • 在此特此聲明:一下所有鏈接均來自互聯網,在此記錄下我的查閱學習歷程,感謝各位原創作者的無私奉獻 ! 技術一點一點積...
    遠航的移動開發歷程閱讀 11,218評論 12 197
  • 最新整理的面試題 點我 需要繼續學習的 Android中為啥會65535的限制,解釋下原因.http://blog...
    Alfred泉閱讀 1,141評論 0 7
  • 之前推送了一篇支付寶免費提現攻略(點擊可看),不知道有沒有幫小伙伴們省到錢。研究完了支付寶,我又開始琢磨微信零錢,...
    亭主閱讀 16,765評論 5 18
  • 我走在下班的路上 在日頭還未落山 賺足了一天的口糧 邊走邊看 大膽欣賞 走進辦公室窗外的風光 我同風光一樣 嵌進某...
    詹驚蟄閱讀 827評論 1 7