Trying to enable deep linking to android app, testing intent can't launch activity

6

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
android
android-intent
android-manifest
deep-linking
asked on Stack Overflow Sep 8, 2014 by Brian

5 Answers

13

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"

answered on Stack Overflow Jun 15, 2016 by Kamil Sarna
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."

answered on Stack Overflow Dec 21, 2015 by Nikhil Gupta
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

answered on Stack Overflow Dec 24, 2015 by Quintin Balsdon • edited May 23, 2017 by Community
2

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

answered on Stack Overflow Sep 8, 2014 by soundsofpolaris
2

Simply try as follows

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

Example:
adb shell am start -d rmagazine://opensetting/v1
answered on Stack Overflow Dec 6, 2019 by Farid Haq

User contributions licensed under CC BY-SA 3.0