使用URI的Android Studio深度链接

时间:2018-11-21 21:50:09

标签: android android-studio deep-linking

与其他十几个线程一样,我正尝试通过uri在使用Android Studio的设备上直接进行调试。但是我似乎找不到使用“编辑配置”从Android Studio进行操作的确切示例。确定简单的东西我不见了...

这是我在做什么:

  1. 将uri添加到“编辑配置”中:

enter image description here

  1. 这是AndroidManifest.xml中的意图:

        <activity
        android:name="com.mayapp.StartActivity"
        android:configChanges="orientation|keyboardHidden|screenSize|keyboard|navigation"
        android:label="StartActivity"
        android:launchMode="singleTask"
        android:windowSoftInputMode="stateHidden" >
        <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:scheme=myapp" />
        </intent-filter>
    </activity>
    
  2. 当我尝试调试时出现以下错误:

enter image description here

为文本:

     11/21 13:15:05: Launching MyApp
    Launching deeplink: myapp%3A%2F%2Fdispatch.

    $ adb shell setprop log.tag.AppIndexApi VERBOSE
    $ adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d myapp%3A%2F%2Fdispatch -D
    Error while executing: am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d myapp%3A%2F%2Fdispatch -D
    Starting: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=myapp://dispatch }
    Error: Activity not started, unable to resolve Intent  act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=myapp://dispatch flg=0x10000000 

Error while Launching URL

1 个答案:

答案 0 :(得分:0)

因此,看来我的工作有几个问题。有趣的是,大约4年前配置的AndroidManifest.xml似乎可以正常工作,但是要在Android Studio中运行,不仅需要指定scheme,还需要在其中指定home目的。就我而言,我有多个与同一个scheme相关联的动作,因此答案是在同一个intent中有多个数据段。我找不到关于它的任何Android文档,但是我可能会错过它。因此,对于将来可能遇到此问题的任何人,这就是我所做的:

  1. 像我一样在AndroidManifest.XML中定义intent,但还要确保也有一个home。显然,您希望应用程序在打开时会执行的操作可能有所不同,这方面似乎有很多信息,因此在此不做介绍。对于您要触发的每个操作,请添加一个新的data部分:

      <activity
        android:name="com.myapp.StartActivity"
        android:configChanges="orientation|keyboardHidden|screenSize|keyboard|navigation"
        android:label="StartActivity"
        android:launchMode="singleTask"
        android:windowSoftInputMode="stateHidden" >
        <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:scheme="myapp" android:host="anondispatch"/>
            <data android:scheme="myapp" android:host="dispatch"/>
            <data android:scheme="myapp" android:host="openform"/>
            <data android:scheme="myapp" android:host="opendispatch"/>
        </intent-filter>
    </activity>
    
  2. 在代码中,您可以在指定的onIntent()中的activity方法中找到开头(在我的示例中为StartActivity)。这是解析所需元素的代码示例:

    受保护的void onNewIntent(Intent intent){     super.onNewIntent(intent);     setIntent(intent);     Intent intent = getIntent();     如果(intent.getAction()!= null){         如果(Intent.ACTION_VIEW.equals(intent.getAction())){                 Uri uri = intent.getData();                 字符串主机= uri.getHost(); `                 字符串uriStr = uri.toString();                 如果(host.equalsIgnoreCase(“ anondispatch”)){                     //解析出您想要的                 }        否则,如果(host.equalsIgnoreCase(“ opendispatch”)){                     //解析出您想要的                 }                 否则,如果(host.equalsIgnoreCase(“ openform”)){                     //解析出您想要的                 }                 否则,如果(host.equalsIgnoreCase(“ dispatch)){                     //解析出您想要的                 }             }         }     } }

  3. 从“编辑配置”更新配置,以便调试器可以使用以下命令通过USB在远程设备上运行:

enter image description here