8

I am working on two apps A and B, I wish to interlink them with Deep links.

App B has a deeplink like the following: myApp://open/myAction?param=123

It looks like:

<!-- Update myAction deep link --> <intent-filter android:label="@string/launcherName"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE /> <data android:host="open/*" android:scheme="myApp" /> </intent-filter> 

If I launch the app with the adb it works perfect.

Now I'm trying to launch application B, when user clicks a button within Activity A.

I tried this (found in: GoogleDeveloper ) when the button is clicked (OnClickListener)

// Build the intent Uri myAction = Uri.parse(mEditText.getText().ToString()); // is something like: `myApp://open/myAction?param=1AD231XAs` Intent mapIntent = new Intent(Intent.ACTION_VIEW, myAction); // Verify it resolves PackageManager packageManager = getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; // Start an activity if it's safe if (isIntentSafe) { startActivity(mapIntent); } 

Yet I cannot open the other app with this app.

3 Answers 3

11

The above answer can only open the app with screen defined as LAUNCHER, not with deep link.

This will work to link app XYZ with any app:

 private void startAppXYZfromThisFuckinApp() { // pass the uri (scheme & screen path) of a screen defined from app XXX that you want to open (e.g HomeActivity) Uri uri = Uri.parse("xyz://screen/home"); Intent mapIntent = new Intent(Intent.ACTION_VIEW, uri); //Verify if app XYZ has this screen path PackageManager packageManager = getPackageManager(); List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0); boolean isIntentSafe = activities.size() > 0; //Start HomeActivity of app XYZ because it's existed if (isIntentSafe) { startActivity(mapIntent); } } 

And obviously, in app XYZ AndroidManifest.xml must be something like this:

<activity android:name=".HomeActivity" <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data> android:host="screen/home" android:scheme="xyz" /> </intent-filter> 

It will now open screen HomeActivity from app XYZ!

Sign up to request clarification or add additional context in comments.

Comments

4

Try to create the Intent from PackageManager and set the action (ACTION_VIEW) and the data (myAction) before launching deepLink:

 Uri myAction = Uri.parse(mEditText.getText().toString()); PackageManager packageManager = getPackageManager(); Intent intent = packageManager.getLaunchIntentForPackage(<app_destination_package>); if (intent != null) { intent.setAction(Intent.ACTION_VIEW); intent.setData(myAction); startActivity(intent); } 

1 Comment

That's not deepLink :))
3

Change your manifest like this

<data android:host="open" android:pathPattern="/myAction?param=123" android:scheme=" myApp" /> 

To send an intent in the first activity

Intent intent = new Intent (Intent.ActionView); intent.setData (Uri.Parse (DEEP_LINK_URL)); 

And in your second activity

if(getIntent()!=null){ Intent deepLink = getIntent(); deepLink.getScheme(); deepLink.getData().getPath(); } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.