Заставить приложение Flutter принимать входящие намерения - PullRequest
0 голосов
/ 01 апреля 2020

Документы Flutter для Android разработчиков объясняют, как заставить приложение Flutter принимать входящие Android намерения, и дают пример кода для приема Share намерений. Я воспроизвел его, и он прекрасно работает.

Но сейчас я пытаюсь заставить мое приложение принимать другие типы намерений , в частности Изменить контакт намерение, так что, когда я использую приложение «Телефон» по умолчанию и нажимаю на контакт, моё приложение предлагается завершить действие.

Я перепробовал все возможные комбинации <intent-filter>, которые я смог найти после поиска в Google и поиска в GitHub, но ничто не могло заставить это работать. Вот несколько примеров:

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="vnd.android.cursor.item/person"/>
    <data android:mimeType="vnd.android.cursor.item/contact"/>
    <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
    <data android:mimeType="vnd.android.cursor.item/phone"/>
    <data android:mimeType="vnd.android.cursor.item/phone_v2"/>
</intent-filter>

<intent-filter>
    <action android:name="android.intent.action.GET_CONTENT"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="vnd.android.cursor.item/person" android:host="contacts"/>
    <data android:mimeType="vnd.android.cursor.item/contact" android:host="contacts"/>
    <data android:mimeType="vnd.android.cursor.item/raw_contact" android:host="contacts"/>
</intent-filter>

<intent-filter >
    <action android:name="android.intent.action.EDIT" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:host="contacts"
        android:mimeType="vnd.android.cursor.item/person" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/contact" />
    <data
        android:host="com.android.contacts"
        android:mimeType="vnd.android.cursor.item/raw_contact" />
</intent-filter>

<intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.APP_CONTACT"/>
</intent-filter>

etc.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

Это зависит от используемого приложения «Контакты».

Каждое устройство может поставляться с приложением c контактов, определяемым производителем (например, Контакты Samsung), приложением Google (Контакты Google), поставщик услуг может установить свое собственное приложение «Контакты», или пользователь может использовать приложение, установленное из Google Play (например, «Контакты +»).

Каждое такое приложение может выбрать запуск редактора с целью, которую могут поймать другие приложения, или просто запустите свой собственный встроенный редактор без участия системы намерений.

Если есть намерение быть пойманным, вы можете узнать, что это такое, проверив LogCat, отфильтровав по тегу ActivityManager, он показывает все намерения выбрасываются на устройство, так что вы можете изучить его, чтобы выяснить, какие именно намерения вам нужно поймать.

0 голосов
/ 02 апреля 2020

Для потомков, опираясь на ответ Мармора выше, чтобы показать конкретные шаги:

$ adb logcat | grep ActivityTaskManager
[...]
04-01 18:09:27.306  1384  4229 I ActivityTaskManager: START u0 {act=android.intent.action.INSERT_OR_EDIT typ=vnd.android.cursor.item/contact cmp=android/com.android.internal.app.ResolverActivity (has extras)} from uid 10065
[...]

Так что все, что мне нужно было сделать, это добавить это к моему AndroidManifest.xml:

<intent-filter>
  <action android:name="android.intent.action.INSERT_OR_EDIT"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="vnd.android.cursor.item/contact"/>
</intent-filter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...