2013-07-30 4 views
7

У меня есть текстовое представление, содержащее электронные письма, и я хочу, чтобы у вас есть возможность нажимать на них, чтобы запустить действие в моем собственном приложении. Я использую Linkify.addLinks(TextView, Linkify.EMAIL_ADDRESSES), чтобы сделать электронную почту доступной, однако это вызывает выбор, спрашивающий пользователя, какое приложение они хотели бы открыть. В нем я могу напрямую обрабатывать это событие, чтобы я мог указать, какую активность вызывается при нажатии на ссылка?Ручка Связать события onClick с собственными намерениями

ответ

1

Для этого вы можете использовать контент-провайдеры и фильтры намерений. Может потребоваться написать регулярное выражение для адреса электронной почты, а затем использовать его с помощью Linkify. Here - пример использования пользовательских регулярных выражений и поставщиков контента с помощью Linkify.

7

Один из способов сделать это - переопределить метод startActivity для деятельности, которой принадлежит TextView с Linkify. Затем проверьте Intent действие, которое должно быть ACTION_VIEW для Linkify Intent: ответ

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

Карлоса работает хорошо, но я использую ACTION_VIEW для внешних намерений я хочу начать, как хорошо. К счастью, Linkify добавляет идентификатор приложения в дополнение к намерению (для совместимости с браузером), который не добавляется в мои другие намерения, поэтому я использую следующую логику, чтобы убедиться, что я правильно обрабатываю намерения 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); 
}