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

10,503

Solution 1

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

Solution 2

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"

Solution 3

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."

Solution 4

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

Solution 5

Simply try as follows

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

Example:
adb shell am start -d rmagazine://opensetting/v1
Share:
10,503
Brian
Author by

Brian

Updated on July 27, 2022

Comments

  • Brian
    Brian almost 2 years

    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
    
  • Ankit
    Ankit over 9 years
    Hi soundsofpolaris, I'm doing the same thing and getting same result as @Brain, can you tell me whats the problem now.
  • Divya
    Divya over 8 years
    Hi, did u solve this issue. If yes could you please share the code.
  • soundsofpolaris
    soundsofpolaris over 8 years
    @Divya according to the manifest, it should be: 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.
  • Gaurav Arora
    Gaurav Arora about 8 years
    Have anyone solved it ? I have same problem. But not able to solve
  • Gaurav Arora
    Gaurav Arora almost 7 years
    I have the same problem
  • Someone Somewhere
    Someone Somewhere about 5 years
    I just reproduced this fix - skipping the package triggered the deep link. Unfortunately, currently intent.getData() is returning null, which it shouldn't.
  • CoolMind
    CoolMind over 4 years
    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
    CoolMind over 4 years
    @SomeoneSomewhere, in my case it returns part of a request after /, as expected.