Android 利用scheme協(xié)議進(jìn)行跳轉(zhuǎn)

什么是 URL Scheme?

android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議。

通過定義自己的scheme協(xié)議,可以非常方便跳轉(zhuǎn)app中的各個(gè)頁面;

通過scheme協(xié)議,服務(wù)器可以定制化告訴App跳轉(zhuǎn)到APP內(nèi)部頁面。

之前項(xiàng)目都是我們客戶端和服務(wù)器端用自定義json串的形式來告訴客戶端如何跳轉(zhuǎn),這種方式要手動(dòng)解析字段,有點(diǎn)麻煩。然而scheme協(xié)議自帶字段解析,非常之方便,后面我們就放棄了json解析的方式。


Scheme協(xié)議在Android中使用場(chǎng)景
  • H5跳轉(zhuǎn)到native頁面

  • 客戶端獲取push消息中后,點(diǎn)擊消息跳轉(zhuǎn)到APP內(nèi)部頁面

  • APP根據(jù)URL跳轉(zhuǎn)到另外一個(gè)APP指定頁面


利用scheme協(xié)議跳轉(zhuǎn)的一個(gè)完整實(shí)例
  • 在Mainefest配置文件中配置需要用scheme協(xié)議跳轉(zhuǎn)的Activity
   <!-- scheme協(xié)議 -->
        <activity
            android:name=".SchemeActivity"
            android:label="@string/app_name">

            <!-- 要想在別的App上能成功調(diào)起App,必須添加intent過濾器 -->

                <!-- 協(xié)議部分,隨便設(shè)置 -->
                <intent-filter>
                    <!--協(xié)議部分,隨便設(shè)置-->
                    <data android:scheme="scheme" android:host="mtime" android:path="/goodsDetail" />
                    <!--下面這幾行也必須得設(shè)置-->
                    <category android:name="android.intent.category.DEFAULT"/>
                    <action android:name="android.intent.action.VIEW"/>
                    <category android:name="android.intent.category.BROWSABLE"/>
                </intent-filter>
        </activity>
  • 模擬從網(wǎng)絡(luò)中獲取scheme協(xié)議的url
public class MainActivity extends AppCompatActivity {

    private TextView btnSchemeTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnSchemeTv = (TextView) findViewById(R.id.btn_scheme_tv);
        btnSchemeTv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /**
                 * (1)在manifest配置文件中配置了scheme參數(shù)
                 * (2)網(wǎng)絡(luò)端獲取url
                 * (3)跳轉(zhuǎn)
                 */
                String url = "scheme://mtime/goodsDetail?goodsId=10011002";

                Intent intent = new Intent(Intent.ACTION_VIEW,
                        Uri.parse(url));
                startActivity(intent);
            }
        });
    }
}
  • 獲取scheme協(xié)議參數(shù)
public class SchemeActivity extends Activity {
    private static final String TAG = "SchemeActivity";
    private TextView schemeTv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scheme);
        schemeTv = (TextView) findViewById(R.id.scheme_tv);
        Uri data = getIntent().getData();
        Log.i(TAG, "host = " + data.getHost() + " path = " + data.getPath() + " query = " + data.getQuery());
        String param = data.getQueryParameter("goodsId");
        schemeTv.setText("獲取的參數(shù)為:" + param);
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,715評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評(píng)論 25 708
  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,514評(píng)論 0 15
  • 深夜碼字 今年年初回奶奶家過年 大年初三奶奶說她一直想去二哥的學(xué)??纯?恰好離得也近 所以一家人三輛車就出發(fā)了 我...
    HUAHUAFINE閱讀 507評(píng)論 0 0
  • 我聽過的最煽情的話,不是情人之間的“我愛你”,不是朋友之間的贊譽(yù),也不是夫妻之間的喁喁私語,更不是詩人筆下你儂我儂...
    浣月樓閱讀 1,089評(píng)論 16 11

友情鏈接更多精彩內(nèi)容