2017-06-03 5 views
0

Ich habe die iOS-App erfolgreich für die Verarbeitung von Audiodokumenttypen (nicht Deeplinks!) Konfiguriert, sodass ich den Freigabedialog verwenden kann, um Audiodateien in meiner App zu öffnen. Dies funktioniert einwandfrei.Wie wird die Sendeabsicht (Menübaum) in der nativen App verarbeitet?

Ich habe Android intent-filter in der AndroidManifest.xml erfolgreich so konfiguriert, audiofiles auf die gleiche Weise zu verhandeln, das wird auch gut von Android-System erkannt und ich sehe meine App, wenn ich Share-Menü auf Audiofiles verwende. Allerdings scheint Android Implementierung von Linking Komponente SEND Absicht Aktionen zu ignorieren und nur über View Absicht Aktionen kümmern, wie ich auf IntentModule.java:55 sah:

if (Intent.ACTION_VIEW.equals(action) && uri != null) { 
     initialURL = uri.toString(); 
    } 

Ich versuchte Absicht zu Patch in meinem MainActivity.java es gleiche uri zu machen Rückkehr mit VIEW Aktion , aber dies erzeugt immer einen Fehler in der Laufzeit.

@Override 
public Intent getIntent() { 
    Intent origIntent = super.getIntent(); 
    if (origIntent != null && Intent.ACTION_SEND.equals(origIntent.getAction())) { 
     return new Intent(Intent.ACTION_VIEW, origIntent.getData()); 
    } 
    return origIntent; 
} 

Allerdings bekomme ich einen Fehler immer darauf hinweist, dass getData null ist.

Ich sah this answer, aber mit einer Freigabeerweiterung ist ein Overkill für mich.

Antwort

0

Ich entdeckte, dass Intent zusätzliche Informationen enthalten kann, die ClipData genannt werden, die Uri ebenso enthalten können. Mein Glück war, dass ich hatte genau eine Uri (Ich denke, es mehrere Uri Objekte enthalten kann, wenn ich mehrere Audiodateien teilen. Also dieser Code funktioniert, kann ich jetzt Dateien gemeinsam nutzen native App zu reagieren

@Override 
public Intent getIntent() { 
    Intent origIntent = super.getIntent(); 
    if (origIntent != null && Intent.ACTION_SEND.equals(origIntent.getAction())) { 
     return new Intent(Intent.ACTION_VIEW, this.uriFromClipData(origIntent.getClipData())); 
    } 
    return origIntent; 
} 

private Uri uriFromClipData(ClipData clip) { 
    if (clip != null && clip.getItemCount() > 0) { 
     return clip.getItemAt(0).getUri(); 
    } 
    return null; 
} 
Verwandte Themen