How to get intent Data for Unity to use?

i already have intent-filter to catch some filetype open with my unity app by manifest.xml.

it like user download a file and choose open in my app . so i can’t create customActivity to catch .

<intent-filter>
			<action android:name="android.intent.action.SEND"/>
			 <action android:name="android.intent.action.VIEW" />
			<category android:name="android.intent.category.DEFAULT"/>
			<data android:mimeType="*/*" />
			 <data android:host="*" />
			 <data android:pathPattern=".*\\.ksvquiz" />
			 <data android:pathPattern=".*\\..*\\.ksvquiz" />
			 <data android:pathPattern=".*\\..*\\..*\\.ksvquiz" />
			 <data android:pathPattern=".*\\..*\\..*\\..*\\.ksvquiz" />
		</intent-filter>

but i can’t receive intent message on my script , i found something to receive message on interest, but it doesn’t work ,and another information was partly …

void Start () {
    string arguments = "";
    AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    			AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    
    			AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");
    			bool hasExtra = intent.Call<bool> ("hasExtra", "arguments");
    
    			if (hasExtra) {
    				AndroidJavaObject extras = intent.Call<AndroidJavaObject> ("getExtras");
    				arguments = extras.Call<string> ("getString", "arguments");
    			}
}

does anyone was do samething like this, and was work?

thanks for any help!

finally , it’s work …
i change my Script like this

AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
			AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

			AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");
			
				
			arguments = intent.Call<string> ("getDataString");

Hi all,

In our case we want to get data passing through extras and, after a couple days trying to do this, the way we found to do this was:

AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 

AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");
                 
String text = intent.Call<String> ("getStringExtra", "varName");

In our case, we sent the information through a Cordova app and then read it in Unity.

And, the difference with @Zyosoft was in the Java method, because we want a specific value in the extras, no the URI.

Hope this will helps.

I wanna piggy back on this thread with some extra advice.
If you’re just setting it up, I recommend trying to post the intent URI to see what you’re getting (if anything).

AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");

Debug.Log("intent URI:" + intent.Call<string>("toUri", 0).ToString());

This is what posted to my in app console for reference. A seperate app is launching mine with an int and a string as extras.

URI#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;package=com.MY.APP.IDENTITY;component=com.MY.APP.IDENTITY/com.unity3d.player.UnityPlayerActivity;S.stringVariable1=hello;i.integerVariable1=225500;end

You can see each extra piece of data has a type hint, S for string and i for int.

This was how I parsed an integer, for instance.

int parsedInt = 0;
parsedInt  = intent.Call<int>("getIntExtra", new object[] { "YOUR-VARIABLE-NAME", parsedInt };

And parsing a string:

string parsedString = "";
parsedString = intent.Call<String>("getStringExtra", "YOUR-VARIABLE-NAME"));

You’ll be calling the methods linked below. You’ll want to use the reference to know how to parse each data type.

anybody worked on an equivalent to this thread, for iOS share extensions?

Please see an answer here, It took me a while as well but I figured it out: c# - Read Android intent extra data on Unity app launch - Stack Overflow

Hello people.
Is there a way of clear the intent data after use it?.
Im using a push notification to open a scene, works fine, but the intent data keeps in the app if I dont close, so my function is repeating.

simple code:

void Update()
    {
        AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
        AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");


        string sceneToLoad = intent.Call<string>("getStringExtra", "sceneToOpen");
        if (intent.Call<string>("getStringExtra", "sceneToOpen") != null)
        {
            SceneManager.LoadScene(sceneToLoad);
           //a way to clear intent data here, maybe?
        }
    }

can give me some guidance to make a workaround for this?.
thanks.

Ciao a tutti, per farlo funzionare bisogna modificare anche il manifest?