Ho una vista testuale che contiene e-mail e voglio poterle fare clic per avviare un'attività all'interno della mia app. Sto usando Linkify.addLinks(TextView, Linkify.EMAIL_ADDRESSES)
per rendere le email selezionabili, tuttavia questo apre un selettore che chiede all'utente quale app in cui vorrebbero aprire l'email. Come posso gestire direttamente questo evento in modo da poter specificare quale attività viene chiamata quando si fa clic su un creare un collegamento?Handle Linkify onClick eventi con intenzioni
risposta
È possibile utilizzare provider di contenuti e filtri di intent per questo. Potrebbe essere necessario scrivere una regex per l'indirizzo e-mail e utilizzarla con Linkify. Here è un esempio di come utilizzare regex personalizzati e provider di contenuti con Linkify.
Un modo per ottenere ciò è sostituire il metodo startActivity sull'attività che possiede TextView con Linkify. Quindi, controllare l'azione intenti che dovrebbe essere ACTION_VIEW per Linkify Intent: risposta
@Override
public void startActivity(Intent intent) {
if (TextUtils.equals(intent.getAction(), Intent.ACTION_VIEW)) {
// Your code here
}
else {
super.startActivity(intent);
}
}
Carlos' funziona bene, ma io uso ACTION_VIEW
per intenti esterni voglio iniziare pure. Fortunatamente, Linkify aggiunge l'id dell'applicazione come extra all'intento (per compatibilità con Browser), che i miei altri intenti non aggiungono, quindi utilizzo la seguente logica per assicurarmi di gestire correttamente intenti di 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);
}