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阅读 174,138评论 25 709
  • 在此特此声明:一下所有链接均来自互联网,在此记录下我的查阅学习历程,感谢各位原创作者的无私奉献 ! 技术一点一点积...
    远航的移动开发历程阅读 11,349评论 12 197
  • 最新整理的面试题 点我 需要继续学习的 Android中为啥会65535的限制,解释下原因.http://blog...
    Alfred泉阅读 1,152评论 0 7
  • 之前推送了一篇支付宝免费提现攻略(点击可看),不知道有没有帮小伙伴们省到钱。研究完了支付宝,我又开始琢磨微信零钱,...
    亭主阅读 16,782评论 5 18
  • 我走在下班的路上 在日头还未落山 赚足了一天的口粮 边走边看 大胆欣赏 走进办公室窗外的风光 我同风光一样 嵌进某...
    詹惊蛰阅读 831评论 1 7