2014-06-16 20 views
5

Sto provando a scrivere una semplice attività con Xamarin per Android a cui è possibile condividere gli URL (ad esempio, Chrome potrebbe condividere un URL per la mia attività).Come ricevere URL con Xamarin Intent Filters

Ecco quello che ho finora:

[Activity (Label = "LinkToDesktop", MainLauncher = true)] 
[IntentFilter (new[] { 
    Intent.ActionSend, 
    Intent.CategoryBrowsable, 
    Intent.CategoryDefault, 
    })] 

public class MainActivity : Activity 
{ 
    protected override void OnCreate (Bundle bundle) 
    { 
     base.OnCreate (bundle); 
     string text = Intent.GetStringExtra ("MyData") ?? "Data not available"; 
    } 
} 

Purtroppo, la mia app non risulta nella lista di Chrome quando provo a condividere. E mi manca qualcosa?

Modifica, codice aggiornato a quello che ho postato di seguito. Ancora non compare come target quando vado su Condividi da Chrome.

[Activity (Label = "LinkToDesktop", MainLauncher = true)] 
    [IntentFilter (new[] { Intent.ActionSend }, 
    Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault }) 
] 
public class MainActivity : Activity 
    { 
    protected override void OnCreate (Bundle bundle) 
     { 
     base.OnCreate (bundle); 
     string text = Intent.GetStringExtra ("MyData") ?? "Data not available"; 
     } 

    protected override void OnNewIntent (Intent intent) 
     { 
     base.OnNewIntent (intent); 
     } 
    } 

risposta

7

Capito. La parte principale che mi mancava era DataMimeType.

[Activity (Label = "LinkToDesktop", MainLauncher = true)] 
[IntentFilter (new[] { Intent.ActionSend }, Categories = new[] { 
    Intent.CategoryDefault, 
    Intent.CategoryBrowsable 
}, DataMimeType = "text/plain")] 
public class MainActivity : Activity 
    { 
    protected override void OnCreate (Bundle bundle) 
     { 
     base.OnCreate (bundle); 
     if (!String.IsNullOrEmpty (Intent.GetStringExtra (Intent.ExtraText))) 
      { 
      string subject = Intent.GetStringExtra (Intent.ExtraSubject) ?? "subject not available"; 
      Toast.MakeText (this, subject, ToastLength.Long).Show(); 
      } 
     } 
    } 
1

Perché pensi che l'url è in MyData? Quello non è dove ActionSend sta inserendo i dati negli extra.

In base ai documenti Android ActionSend, i dati sono disponibili in android.intent.extra.TEXT tramite Intent.ExtraText. Quindi:

var text = Intent.GetStringExtra(Intent.ExtraText); 

Anche le due categorie che ci avete fornito sono definiti erroneamente nel vostro IntentFilter. Dovrebbe essere:

[IntentFilter(new[] { Intent.ActionSend }, 
    Categories = new[] { Intent.CategoryBrowsable, Intent.CategoryDefault })] 
+0

Non ero ancora preoccupato per MyData perché quel codice non era nemmeno stato raggiunto. – mason

+0

Bene con il corretto 'IntentFilter' è raggiunto? So che con NFC è necessario ottenere i dati nel metodo 'OnNewIntent', quindi prova a sovrascriverli e verifica se questo è il caso anche qui. – Cheesebaron

+0

No, ancora non funziona. Ho aggiornato la mia domanda con il codice che ho provato. – mason

Problemi correlati