2013-06-04 10 views

risposta

41

Per apparire in questa lista è necessario modificare il file AndroidManifest.xml e aggiungere le seguenti righe sotto la vostra attività:

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="text/plain" /> 
</intent-filter> 

Questo renderà la vostra app apparirà nella lista. Ora penso che potresti anche voler sapere come gestirlo nel tuo codice. Quando un'altra applicazione sta per condividere del testo con te, inizierà la tua applicazione con un "Intento" di Android. Per poter utilizzare Intents, è necessario un plug-in PhoneGap. Penso che WebIntent potrebbe adattarsi a te. Questo sarebbe il codice:

// deviceready is PhoneGap's init event 
document.addEventListener('deviceready', function() { 
    window.plugins.webintent.getExtra(WebIntent.EXTRA\_TEXT, function (url) { 
    // url is the value of EXTRA_TEXT 
    }, function() { 
    // There was no extra supplied. 
    }); 
}); 

Maggiori informazioni WebIntent qui: http://smus.com/android-phonegap-plugins/

Nota: Non credo che sarete in grado di fare questo con PhoneGap Costruire però ... è possibile utilizzare solo plugin supportati e non è possibile modificare tanto il file AndroidManifest.xml. Probabilmente dovrai percorrere la strada Cordova e costruire tutto sulla tua macchina.


Modifica: ci sono alcune persone che chiedono come farlo su iOS. Esistono due passaggi per eseguire questa operazione:

  1. Associare la tua app con le giuste associazioni di tipi di file aggiungendo le informazioni rilevanti nel tuo info.plist. Questa risposta SO spiega come farlo: How do I associate file types with an iPhone application?. Questo farà apparire la tua app nell'elenco ma la tua app non riceverà ancora i dati.
  2. L'applicazione verrà ora avviata con nuovi parametri. Ora devi essere in grado di leggere questi parametri. Selezionare questa domanda/risposta su SO, lo fa esattamente questo: How to pass arguments to app built on Phonegap
+0

Sembra che questa risposta sia stata copiata dal sito Web del plug-in WebIntent invecchiato ... C'è dell'altro? Non sto ricevendo EXTRA_TEXT o URI tramite WebIntent su deviceready o resume. – ericpeters0n

+0

@ ericpeters0n sei sicuro che il plugin sia installato correttamente? Non ho mai fatto ciò che viene chiesto qui con PhoneGap ma con altre tecnologie, e so per certo che se il filtro intent è scritto come sopra come figlio della tua attività, allora l'attività verrà visualizzata nell'elenco e riceverà l'intento. Se non lo si ottiene con WebIntent che indica che WebIntent non è installato/in esecuzione correttamente, WebIntent non funziona più con versioni recenti di Android (Kitkat?), Ma ho qualche dubbio su quest'ultimo ... il principio di intenti non è cambiato da un po 'di tempo ... –

+0

Come funzionerebbe su iPhone? L'esempio sopra riportato è solo per Android, e sono interessato a sapere in che modo un'app può essere registrata in modo simile su iPhone per la condivisione tramite l'app. –

1

@ ericpeters0n - Quando si utilizzano applicazioni per iPhone e la condivisione, da dove viene questa lista di applicazioni provengono da allora? Ad esempio, quando sono nella Raccolta foto e condivido, l'elenco include Messaggio, Posta, Twitter, Facebook, Flickr. In che modo queste app si sono registrate per comparire in questo elenco?

+0

Versioni di iOS precedenti a 8 doveva avere questa funzionalità un po 'cablata in loro. Al contrario, le app Android si registrano semplicemente per ricevere l'intento di condivisione e vengono automaticamente aggiunte alla lista (un design più intelligente IMHO :-) – Eno

4

Sono riuscito a ottenere l'URL del file da condividere; usando EXTRA_STREAM insted di EXTRA_TEXT all'interno di deviceready, modificando Webintent.java e aggiungendo un filtro intent in AndroidMenifest.xml.

Ecco come la mia attività principale appare:

<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.Black.NoTitleBar" android:windowSoftInputMode="adjustResize"> 
     <intent-filter android:label="@string/launcher_name"> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter android:label="@string/app_name"> 
      <data android:mimeType="*/*" /> 
      <action android:name="android.intent.action.SEND" />     
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

ho scoperto che il plugin ha un bug per la parte EXTRA_STREAM, così ho modificato il mio javafile in base a questo:

https://github.com/Initsogar/cordova-webintent/issues/23

anche all'interno del mio file js, devo chiamare la funzione in questo modo: (uso di EXTRA_STREAM invece di EXTRA_TEXT)

window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_STREAM, function (url) { 
     // url is the value of EXTRA_STREAM 
     alert(url); 
     }, function() { 
     // There was no extra supplied. 
     alert("no url"); 
     }); 

e ottengo l'URI del file.

+0

Se hai una nuova domanda, per favore chiedi facendo clic su [Ask Question] (http: // stackoverflow.com/questions/ask). Includere un collegamento a questa domanda se aiuta a fornire il contesto. – ryanyuyu

+0

Pensavo di aver digitato e risposto ... anche se mi dispiace se era troppo confusionario per sembrare una risposta (ho provato a farlo semplicemente digitando la modifica) – Moinkhan

Problemi correlati