2015-09-30 10 views
6

Cercare una soluzione aggiornata, eseguendo l'ultima release ionica 1.1.0 che utilizza Cordova 5.x. Cercando di essere in grado di navigare in un sito web in chrome e di inviare l'url alla mia app Android ionica usando l'intento del web. La mia app viene compilata e eseguita, tuttavia quando tento di utilizzare la condivisione su Chrome (o qualsiasi altra app) e scelgo la mia app da condividere, la mia app si arresta in modo anomalo.Invio dell'url all'app per android ionico tramite webintent da un'altra app

ho tentato di usare il plugin:

plug ionico aggiungere https://github.com/Initsogar/cordova-webintent

e poi rimosso il plug e ho anche provato una forcella più recentemente aggiornato:

plug ionico aggiungere https://github.com/fluentstream/cordova-webintent

Nel mio file app.js inserisco il seguente codice:

.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { 
    $ionicPlatform.ready(function() { 
    window.plugins.webintent.getExtra(window.plugins.webintent.EXTRA_TEXT, 
    function(url) { 
     incomingURL = url; 
     //alert(incomingURL); 
     console.log(incomingURL); 
    }, function() { 
     incomingURL = false; 
     //alert("no url"); 
     console.log("no url"); 
    }); 
    }); 
}) 

Ho anche provato:

.run(function($ionicPlatform, $rootScope, $ionicHistory, $state) { 
    $ionicPlatform.ready(function() { 
    window.plugins.webintent.getUri(function(url) { 
     if(url !== "") { 
      alert(url);//url is the url the intent was launched with 
     } 
    }); 
    }); 
}) 

Nel file config.xml metterei:

<plugin name="WebIntent" value="com.borismus.webintent.WebIntent"/> 

Nel AndroidManifest.xml metterei manualmente:

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

Il l'app viene eseguita, ma quando apro il chrome e faccio clic sul pulsante di condivisione, quindi scegli la mia app, l'app si spegne. Viene visualizzato il seguente messaggio Android:

Sfortunatamente, MyAppName si è interrotto.

Qualcuno può suggerire una soluzione per convincere la condivisione a lavorare con la mia app ... o sto dimenticando qualcosa e facendo qualcosa di sbagliato.

Grazie!

risposta

4

Ho scoperto che il problema era dovuto al modo in cui ho impostato il file AndroidManifest.xml.

Stavo usando un tag attività extra, quando avrei dovuto includere l'intenzione nell'attività 1.

Per esempio ho avuto:

<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> 
</activity> 
<activity android:name="ShareActivity"> 
    <intent-filter> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 

Quando avrei dovuto:

<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> 
     <action android:name="android.intent.action.SEND" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <data android:mimeType="text/plain" /> 
    </intent-filter> 
</activity> 
3

Questa domanda è un po 'invecchiato. Ma ho avuto una sfida più o meno simile. Non ho avuto fortuna con il plugin WebIntent e quindi ho sviluppato il mio plugin per trattare con Intents su Android.

Check questo: https://github.com/napolitano/cordova-plugin-intent

mentre io sto ancora lavorando su questo plugin per i miei progetti, ma c'è ancora quasi utilizzabile e la documentazione dovrebbe essere sufficiente per ottenere un piede nella porta.

Alcuni retroscena:

Per consentire applicazioni di terze parti per inviare contenuti al tuo app, è necessario aggiungere un intent-filtro al MainActivity nel AndroidManifest.xml.

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

Mentre è possibile eseguire questa operazione manualmente, questo ha alcuni svantaggi - quindi probabilmente desidera avere un gancio o qualcosa di simile. Se vai al repository qui sopra, troverai questo esempio.

Oltre al filtro intent, al momento è necessario un plug-in che consenta a) di accedere all'intento cordova (importante per ottenere l'accesso ai contenuti inviati all'avvio dell'applicazione) e di ricevere notifiche se è stato attivato l'evento onNewIntent, che succede, se il contenuto viene inviato mentre la tua applicazione è in esecuzione.

Questo è esattamente ciò che fa il mio plugin. Ti dà accesso all'intento di cordova e ti consente di gestire l'evento onNewIntent.

Esempi:

window.plugins.intent.getCordovaIntent(function (Intent) { 
    console.log(Intent); 
}, function() { 
    console.log('Error'); 
}); 

window.plugins.intent.setNewIntentHandler(function (Intent) { 
    console.log(Intent); 
}); 

si riceverà un oggetto intento limitata come risultato di successo. Questo può essere elaborato dalla tua app.

Esempio:

{ 
    "action": "android.intent.action.SEND_MULTIPLE", 
    "clipItems": [ 
     { 
      "uri": "file:///storage/emulated/0/Download/example-document.pdf" 
     }, 
     { 
      "uri": "file:///storage/emulated/0/Download/example-archive.zip" 
     } 
    ], 
    "flags": 390070273, 
    "type": "*/*", 
    "component": "ComponentInfo{com.example.droid/com.example.droid.MainActivity}", 
    "extras": "Bundle[mParcelledData.dataSize=596]" 
} 

Anche se questo esempio mostra in realtà JSON, si riceverà un oggetto pronto per l'uso.

Si noti che sviluppo il plugin attualmente solo per le mie esigenze. Tuttavia potrebbe funzionare anche per te. Al momento non sono stati aggiunti esempi angolari al README, ma penso che non dovrebbe essere un grosso problema.

+0

Mentre sto utilizzando il plug-in https://github.com/Initsogar/cordova-webintent e sembra funzionare bene per me, il tuo bit sull'impostazione di AndroidLaunchMode in config.xml mi è stato di grande aiuto. Grazie! –

+0

@Axel Napolitano, provo a usare il tuo plugin ma sto ottenendo un intento ma mancano i clipItem. Che cosa sto facendo di sbagliato? Ho esattamente le stesse impostazioni della pagina dei plugin. Inoltre ricevo un messaggio di errore che getRealPathFromContentUrl() non è una funzione. – Strabek

+0

Ehi, non ci ho passato molto tempo negli ultimi mesi perché ha funzionato per me. Avrò un'occhiata su di esso, ma ancora non posso promettere una soluzione immediata a causa del mio carico di lavoro corrente. Perdonami per quello :-/ –