8

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

4

3 回答 3

10

卡洛斯的回答效果很好,但我也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);
}
于 2014-06-19T21:09:35.967 回答
7

实现此目的的一种方法是使用 Linkify 覆盖拥有 TextView 的 Activity 的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);
    }
}
于 2014-03-06T22:40:17.860 回答
1

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

于 2013-10-08T05:45:25.183 回答