Android中Scheme跳转协议

简书地址
http://www.jianshu.com/p/7b56ed162a63

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 Scheme跳转协议是一种在Android操作系统用于app之间通信的机制。通过Scheme跳转协议,一个app可以通过调用另一个app的特定功能或界面,实现跳转和传递参数的功能。 Android Scheme跳转协议的实现过程如下: 1. 在待跳转的app,需要先定义一个特定的Scheme,用于唯一标识该app。一般情况下,Scheme由app的包名或自定义的scheme名称组成。 2. 在相应的Activity或Fragment,通过Intent设置该Activity或Fragment的Scheme,以及需要传递的参数,如数据、标志位等。 3. 在需要跳转到该app的app,通过调用系统提供的隐式Intent的方式,并设置跳转Scheme以及传递的参数,发起跳转。 4. 如果目标app已安装在设备上,在符合条件的应用列表,用户可以选择使用该app打开链接。 5. 目标app接收到跳转请求后,在其Manifest文件通过声明Intent过滤器,匹配相应的Scheme和路径,并执行对应的操作或界面跳转。 需要注意的是,为了保证Scheme跳转的可用性,需要在app安装时注册相应的Scheme,以便系统能够正确地将请求导向目标app。 Scheme跳转协议在实际应用常被用于app之间的跳转和通信,例如在支付宝使用支付宝Scheme跳转到其他第三方APP完成支付,或者在浏览器使用特定的Scheme跳转到其他APP打开指定的页面等。 总之,Android Scheme跳转协议是一种方便实现app之间通信的机制,通过定义特定的Scheme和使用Intent实现跳转和传参,能够提供更丰富的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值