Можете ли вы определить фильтр намерений Android, используя строковый ресурс?

Я хотел определить имя строки моего намерения в файле strings.xml, а затем привязать эту строку к фильтру намерения так:

<intent-filter >
    <action android:name="@string/app_intent" >
    </action>

    <category android:name="android.intent.category.DEFAULT" >
    </category>
</intent-filter>

Однако, когда я это пробовал, я получаю различные ошибки о том, что система не может найти никакой активности для обработки моих намерений. Я пытался сохранить значения (т.е. Названия целей) централизованными, а не жестко закодированными как в манифесте, так и в коде. Как бы то ни было, по крайней мере, это позволяет мне централизовать его из кода приложения, но у меня все еще есть жестко закодированное в манифесте.

Неужели это невозможно сделать или есть какой-то способ заставить его работать?

Ответы

Ответ 1

Не проблема с фильтром намерения, проблема связана с android:name. Атрибут android:name также не принимает строковый ресурс для имени активности. пример <activity android:name="@string/app" android:label="@string/app_name"> недействителен в android.

Ответ 2

Непосредственно не отвечая на вопрос OP, но что подтолкнуло меня к этому вопросу, так это то, что я хотел иметь возможность определять различные действия в разных ситуациях (включая определение действия, запускающего компонент в библиотеке Android в приложении, использующем эту библиотеку). В конце концов я обнаружил о манифестных заполнителях, которые на самом деле были мне нужны. Надеюсь, это будет полезно и кому-то еще.

PS: Да, определение заполнителя в приложении по-прежнему позволяет использовать его в библиотеке из-за слияния манифеста, происходящего во время сборки.