android 触摸 协议,Android中Scheme跳转协议

Android中Activity之间的跳转我们可以直接使用显示或者隐式意图跳转都可以

但是实际开发过程中可能会碰到这类问题

比如App做活动,通过推送过来的消息告诉客户端跳转到某某界面,客户端本地自然不能写死,不然就麻烦了

今天小结一下开发过程中碰到的这类问题的解决方式:

我们都知道网站都是通过URL的形式访问的

同样的我们App也完全可以通过这种方式进行跳转

举个小例子

点我试试

andy为自定义的scheme,固定字符串。

在清单文件中加入IntentFilter

7b56ed162a63

在TextView中显示

7b56ed162a63

当然这里设置了当前的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());

}

}

7b56ed162a63

断点可以看到已经有数据传递过来了

这个时候我们只需要根据Uri获取里面的参数然后做相应的动作即可

Uri结构的基本形式

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

现在我们定义具体的参数

比如我们跳转的页面是SchemeActivtiy参数buffer

domain=scheme_activity

buffer=这是个字符串

点我一下

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");

}

}

点击测试

7b56ed162a63

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值