11

I'm trying to enable deep linking so that certain links launch my app.

I read this turotial https://developer.android.com/training/app-indexing/deep-linking.html and following it pretty close but when I try to test it by using adb to send the VIEW intent to the app I just get the error

Error: Activity not started, unable to resolve Intent { act=android.intent.actio
n.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp.DeepLinkActivity }

DeepLinkActivity.java

public class DeepLinkActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getIntent().getAction() == Intent.ACTION_VIEW) {
        Uri uri = getIntent().getData();

    }

  }
}

Android Manifest declaring deeplink activity

<activity android:name="com.myapp.DeepLinkActivity" >
        <intent-filter>

            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />


            <data
                android:host="gizmos"
                android:scheme="example" />
            <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
            <data
                android:host="www.example.com"
                android:pathPrefix="gizmos"
                android:scheme="http" />
        </intent-filter>
    </activity>

ADB command to send the view intent

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.myapp.DeepLinkActivity

But I don't think I even need the full path to the activity

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos" com.myapp
Brian
  • 4,328
  • 13
  • 58
  • 103
  • @Brian Hi Brain, I'm doing the same thing and getting same result, can you tell me what you did to solve it. – Ankit Nov 21 '14 at 07:47

5 Answers5

27

Try skipping package param entirely. I had exactly same problem and it works.

adb shell am start -W -a android.intent.action.VIEW -d "example://gizmos"

Kamil Sarna
  • 5,993
  • 1
  • 32
  • 22
  • 1
    I just reproduced this fix - skipping the package triggered the deep link. Unfortunately, currently intent.getData() is returning null, which it shouldn't. – Someone Somewhere Jun 10 '19 at 22:23
  • Thanks, the error disappeared. In emulator it opens Google Chrome with the link, if `android:pathPrefix=".*"`, and a dialog to choose Chrome or my app, if `android:pathPrefix="/something"`. – CoolMind Dec 16 '19 at 15:49
  • @SomeoneSomewhere, in my case it returns part of a request after `/`, as expected. – CoolMind Dec 16 '19 at 15:51
4

Comment out the second data part from your Android Manifest. As per google documentation of deep link :

"Intent filters may only contain a single data element for a URI pattern. Create separate intent filters to capture additional URI patterns."

Nikhil Gupta
  • 881
  • 6
  • 14
3

In your manifest you defined your scheme as "http" but in your intent constructor you are using "example."

soundsofpolaris
  • 596
  • 3
  • 12
  • Hi soundsofpolaris, I'm doing the same thing and getting same result as @Brain, can you tell me whats the problem now. – Ankit Nov 21 '14 at 07:48
  • Hi, did u solve this issue. If yes could you please share the code. – Divya Nov 03 '15 at 04:35
  • @Divya according to the manifest, it should be: http://www.example.com, which is putting the "scheme" and the "host" together. But in his shell code it says example://gizmo. If you wanted that, the manifest should have "example" as the scheme, and "gizmo" as the host. – soundsofpolaris Jan 05 '16 at 22:13
  • Have anyone solved it ? I have same problem. But not able to solve – Gaurav Arora May 12 '16 at 12:44
  • I have the same problem – Gaurav Arora Sep 19 '17 at 06:49
3

The problem is you have one intent filter for 2 types of deep links:

<activity
    android:name="app.myActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <!-- Accepts URIs that begin with "example://gizmos”-->
        <data
            android:host="gizmos"
            android:scheme="example" />
    </intent-filter>
    <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="www.example.com"
            android:pathPrefix="/gizmos"
            android:scheme="http" />
        <!-- note that the leading "/" is required for pathPrefix-->                
    </intent-filter>
</activity>

And you will be able to use both on the ADB shell. Please see my full answer here

Community
  • 1
  • 1
Quintin Balsdon
  • 5,484
  • 10
  • 54
  • 95
3

Simply try as follows

Command:
adb shell am start -d your-deep-link

Example:
adb shell am start -d rmagazine://opensetting/v1
Farid Haq
  • 3,728
  • 1
  • 21
  • 15