【问题标题】:Handle Linkify onClick events with own intent以自己的意图处理 Linkify onClick 事件
【发布时间】:2013-07-30 21:24:00
【问题描述】:

我有一个包含电子邮件的文本视图,我希望能够单击它们以在我自己的应用程序中启动一个活动。我正在使用Linkify.addLinks(TextView, Linkify.EMAIL_ADDRESSES) 使电子邮件可点击,但是这会弹出一个选择器,询问用户他们想在哪个应用程序中打开电子邮件。如何直接处理此事件,以便我可以指定单击时调用的活动在链接上?

【问题讨论】:

    标签: android linkify


    【解决方案1】:

    Carlos 的回答效果很好,但我也使用ACTION_VIEW 来表达我想开始的外部意图。幸运的是,Linkify 确实将应用程序 ID 作为额外的 Intent(为了浏览器兼容性)添加,而我的其他 Intent 没有添加,因此我使用以下逻辑来确保正确处理 Linkify Intent:

    @Override
    public void startActivity(Intent intent) {
        boolean handled = false;
    
        if (TextUtils.equals(intent.getAction(), Intent.ACTION_VIEW)) {
    
            String app_id = intent.getStringExtra(Browser.EXTRA_APPLICATION_ID);
            if ( TextUtils.equals(getApplicationContext().getPackageName(), app_id) )
            {
                // This intent is a view coming from Linkify; handle internally
                //  << do something smart here >>
                handled = true;
            }
        }
    
        if (!handled)
            super.startActivity(intent);
    }
    

    【讨论】:

      【解决方案2】:

      实现此目的的一种方法是使用 Linkify 覆盖拥有 TextView 的 Activity 上的 startActivity 方法。然后,检查 Linkify Intent 的 Intent 操作应该是 ACTION_VIEW

      @Override
      public void startActivity(Intent intent) {
          if (TextUtils.equals(intent.getAction(), Intent.ACTION_VIEW)) {
              // Your code here   
          }
          else {
              super.startActivity(intent);
          }
      }
      

      【讨论】:

        【解决方案3】:

        您可以为此使用内容提供程序和意图过滤器。可能必须为电子邮件地址编写一个正则表达式,然后将其与 Linkify 一起使用。 Here 是如何将自定义正则表达式和内容提供程序与 Linkify 一起使用的示例。

        【讨论】:

          猜你喜欢
          • 2022-01-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-01
          • 2014-02-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-14
          相关资源
          最近更新 更多