Ошибка отсутствия URL-адреса в фильтре VIEW Intent, если я укажу mimeType для действия PICK

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

<intent-filter>
  <action android:name = "android.intent.action.VIEW"/>
  <action android:name = "android.intent.action.PICK"/>
  <data android:mimeType = "video/*" />
</intent-filter>

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

Хотя кажется, что все работает как положено, каждый раз, когда я пытаюсь отредактировать манифест, Android Studio помечает весь код фильтра намерений красным подчеркиванием, сообщая об ошибке missing url. Ошибка исчезает, если я удалю <data android:mimeType = "video/*" />, но если я это сделаю, приложение появится как выбор не только для видеофайлов.

ты нашел ответ?

peshkira 10.10.2018 11:53
8
1
3 767
3

Ответы 3

Подсказка отсутствует URL-адрес не из-за action.PICK, ошибка связана с action.VIEW

<intent-filter>
  <action android:name = "android.intent.action.VIEW"/>  //delete this line
  <action android:name = "android.intent.action.PICK"/>
  <category android:name = "android.intent.category.DEFAULT"/>  //add this line
  <category android:name = "android.intent.category.OPENABLE"/> //and this
  <data android:mimeType = "video/*" />
</intent-filter>

для action.VIEW вы можете определить другой фильтр намерения.

Я знаю, что ошибка связана с действием VIEW, как указано в заголовке моего вопроса. Проблема в том, что я хочу иметь как действие PICK, так и VIEW, и я не понимаю, почему эта ошибка возникает только при наличии строки mimeType. Используя ваш код, я потерял возможность получить действие. ПОСМОТРЕТЬ намерение, которое еще хуже (как я уже сказал, приложение работает, несмотря на отметку об ошибке в редакторе Android Studio)

AndreaF 26.09.2018 02:01

@AndreaF У меня такая же проблема. Вы можете просто подавить это предупреждение.

Чтобы подавить, попробуйте следующее:

<intent-filter tools:ignore = "AppLinkUrlError">
  <action android:name = "android.intent.action.VIEW"/>
  <action android:name = "android.intent.action.PICK"/>
  <data android:mimeType = "video/*" />
</intent-filter>

добавьте xmlns: tools = "http://schemas.android.com/tools" в свой начальный тег манифеста, если его еще нет.

Что ж, это уродливое решение

Jonathan F. 22.12.2020 14:11

Ребятам из Google, кажется, нравится намекать, а не отвечать на вопросы глубинные ссылки.

Важно правильно указать схему. Для файлов в более старых версиях это «файл», в более новых версиях Android - «контент». Для ссылок это http и https.

<intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "*"
                android:mimeType = "application/octet-stream"
                android:pathPattern = ".*\\.ext"
                android:scheme = "file" />
        </intent-filter>

        <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data
                android:host = "*"
                android:mimeType = "application/octet-stream"
                android:pathPattern = ".*\\.ext"
                android:scheme = "content" />
        </intent-filter>

Другие вопросы по теме