处理具有自己意图的链接onClick事件

时间:2013-07-30 21:24:01

标签: android linkify

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

3 个答案:

答案 0 :(得分:9)

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

@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);
}

答案 1 :(得分:7)

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

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

答案 2 :(得分:1)

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