欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

android Activity Scheme跳转协议运用讲解

程序员文章站 2022-07-06 10:57:02
scheme协议 android中的scheme是一种页面内跳转协议,通过自定义scheme协议,可以跳转到app中的任何页面。 服务器可以定制化跳转app页面app可以通过scheme跳转到另一个...

scheme协议

android中的scheme是一种页面内跳转协议,通过自定义scheme协议,可以跳转到app中的任何页面。

服务器可以定制化跳转app页面app可以通过scheme跳转到另一个app页面可以通过h5页面跳转app原生页面

协议格式

 uri.parse("qh://test:8080/goodsgoodsid=8897&name=fuck")

qh代表scheme协议名称test代表scheme作用的地址域8080代表改路径的端口号/goods代表的是指定页面(路径)goodsid和name代表传递的两个参数

scheme使用

定义一个scheme

 
            
            
                 
                
                
                
                
                
            
        

获取scheme跳转的参数

uri uri = getintent().getdata();
        if (uri != null) {
            // 完整的url信息
            string s = uri.tostring();
            sb.append(s + "\n");
            // scheme部分
            string scheme = uri.getscheme();
            sb.append("scheme=" + scheme + "\n");
            // host部分
            string host = uri.gethost();
            sb.append("host=" + host + "\n");
            // 访问路劲
            string path = uri.getpath();
            sb.append("path=" + path + "\n");
            //port部分
            int port = uri.getport();
            sb.append("port=" + port + "\n");
            // query部分
            string query = uri.getquery();
            sb.append("query=" + query + "\n");
            //获取指定参数值
            string goodsid = uri.getqueryparameter("goodsid");
            sb.append("goodsid=" + goodsid + "\n");
            //列举所以参数名
            set queryparameternames = uri.getqueryparameternames();
            tv_scheme.settext(sb.tostring());
        }

调用方式

 1. 原生调用
 intent intent1 = new intent(intent.action_view, uri.parse("qh://test:8080/goodsgoodsid=8897&name=fuck"));
                startactivity(intent1);
2. html调用
<a href="qh://test:8080/goods?goodsid=8897&name=fuck">打开商品详情</a>

判断某个scheme是否有效

intent intent = new intent(intent.action_view, uri.parse("qh://test:8080/goodsgoodsid=8897&name=fuck"));
list activities = getpackagemanager().queryintentactivities(intent, 0);
boolean isvalid = !activities.isempty();
if (isvalid) {
    startactivity(intent);
}