3

We have two Android applications: one implemented using native Java and another written using Ionic. The Ionic app launches my app which is the Android app using the lampaa plugin. I could receive the extras that the Ionic app provides using the following code:

String keyid = getIntent().getStringExtra("keyid");

Before I exit my app, I would like to send extras to the Ionic app. This is easily done from the Android side. How does the Ionic app know that my application has transferred control to it and how can it retrieve the extras that I have sent?

Sandah Aung
  • 6,156
  • 15
  • 56
  • 98

3 Answers3

6

I think in your case to get extras from your native app you need to use other plugin like cordova-plugin-intent.

For example :

    //To get the intent and extras when the app it's open for the first time
    window.plugins.intent.getCordovaIntent (function (intent) {
        intenthandler(intent);
    });

    //To get the intent and extras if the app is running in the background
    window.plugins.intent.setNewIntentHandler (function (intent) {
        intenthandler(intent);
    });

    //To handle the params
    var intenthandler = function (intent) {
          if (intent && intent.extras && intent.extras.myParams) {
        //Do something
          }
    };

For more help check to here.

Hopes this will help you!!

Community
  • 1
  • 1
Santosh Shinde
  • 6,045
  • 7
  • 44
  • 68
0

To add on, In case of web intents, you can use the following plugins thats helps in getting extras and URL info.

It also has other methods like startActivity and sendBroadcast too.

Gandhi
  • 11,875
  • 4
  • 39
  • 63
0

I also needed to do similar stuff. I struggled in the beginning but now I have found the solution, happy to share this information, this could be useful for others

First you need to write a cordova plugin, this plugin should have BroadcastReceiver implementation as shown below

public class IntentReceiver extends BroadcastReceiver {
public static final String EXTRA_NAME = "message";
@Override
    public void onReceive(Context ctx, Intent intent) {
try{
Intent mainIntent = new Intent(ctx, Class.forName(ctx.getPackageName() + ".MainActivity"));
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String extra = intent.getStringExtra(EXTRA_NAME);
mainIntent.putExtra("message", extra);
ctx.startActivity(mainIntent);
}catch(Exception ex){ }
}

Plugin.xml Add below nodes to plugin.xml file

<config-file target="AndroidManifest.xml" parent="/manifest/application">
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/plain" />
            </intent-filter>
        </config-file>
        <config-file parent="/manifest/application" target="AndroidManifest.xml">
            <receiver android:name="hcw.fi.phoniro.receiver.IntentReceiver" android:exported="true">
                <intent-filter android:priority="999">
                    <action android:name="android.intent.action.SEND" />
                </intent-filter>
            </receiver>
        </config-file>

htmlpage.ts Add below code in platform ready

platform.ready().then(() => {

   window.plugins.intent.setNewIntentHandler(this.HandleNewIntent);
   window.plugins.intent.getCordovaIntent(this.HandleNewIntent, function ()    {
    //alert("Error: Cannot handle open with file intent");
  });

});
HandleNewIntent(intent){

      if(intent && intent.extras){  
intent.extras.myParams) {
        // Do something with the File
        document.getElementById("intentdata").innerHTML = "Data from Android app : " +intent.extras.message;
      }else{
        // this will happen in getCordovaIntent when the app starts and there's no
        // active intent
        console.log("The app was opened manually and there's not file to open");
        //alert('The app was opened manually and there is not file to open' + intent);
      }
  }