Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以自己的意图处理Linkify onClick事件_Android_Linkify - Fatal编程技术网

Android 以自己的意图处理Linkify onClick事件

Android 以自己的意图处理Linkify onClick事件,android,linkify,Android,Linkify,我有一个包含电子邮件的文本视图,我希望能够单击它们在我自己的应用程序中启动活动。我正在使用Linkify.addLinks(TextView,Linkify.EMAIL\u地址)使电子邮件可点击,但这会弹出一个选择器,询问用户希望在哪个应用程序中打开电子邮件。如何直接处理此事件,以便指定单击链接时调用的活动?您可以为此使用内容提供商和意图过滤器。可能必须为电子邮件地址编写正则表达式,然后将其与Linkify一起使用。是如何将自定义正则表达式和内容提供程序与Linkify一起使用的示例。实现这一点

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

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

实现这一点的一种方法是在拥有Linkify文本视图的活动上覆盖startActivity方法。然后,检查意图操作,该操作应为action\u VIEW,以了解Linkify Intent:

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

Carlos的回答很好,但我使用
ACTION\u 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);
}
@覆盖
公共空间启动活动(意向){
布尔值=假;
if(TextUtils.equals(intent.getAction(),intent.ACTION_视图)){
String app_id=intent.getStringExtra(Browser.EXTRA应用程序_id);
if(TextUtils.equals(getApplicationContext().getPackageName(),app_id))
{
//这个意图是一个来自Linkify;handle内部的视图
//  >
已处理=正确;
}
}
如果(!已处理)
超级触觉(意图);
}