Android Studio Deep Link с использованием URI - PullRequest
0 голосов
/ 22 ноября 2018

Как и десятки других потоков, я пытаюсь отлаживать прямо на устройстве с помощью Android Studio через URI.Но я не могу найти точный пример того, как кто-то делает это из Android Studio, используя Edit Configuration.Конечно, что-то простое мне не хватает ...

Вот что я делаю:

  1. Добавьте URI в конфигурацию редактирования:

enter image description here

Вот намерение в 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>

При попытке отладки появляется следующая ошибка:

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 голосов
/ 24 ноября 2018

Итак, может показаться, что у меня было несколько проблем.Интересно то, что способ, которым AndroidManifest.xml был настроен около 4 лет назад, казался работающим, но для запуска в Android Studio нужно не только указать scheme, но и home в Intent.В моем случае у меня есть несколько действий, связанных с одним и тем же 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).Вот пример кода, анализирующего искомые элементы:

    protected void onNewIntent (намерение намерения) {super.onNewIntent (намерение);setIntent (намерение);Intent intent = getIntent ();if (intent.getAction ()! = null) {if (Intent.ACTION_VIEW.equals (intent.getAction ())) {Uri uri = intent.getData ();Строка host = uri.getHost ();`String uriStr = uri.toString ();if (host.equalsIgnoreCase ("anondispatch")) {// разобрать, что вы хотите} else if (host.equalsIgnoreCase ("opendispatch")) {// разобрать, что вы хотите} else if (host.equalsIgnoreCase ("openform)")) {// разобрать, что вы хотите} else if (host.equalsIgnoreCase (" dispatch)) {// разобрать, что вы хотите}}}}}

  3. ОбновитьКонфигурация, из Edit Configuration, чтобы отладчик мог работать на удаленном устройстве через USB с помощью следующего:

enter image description here

...