Как сделать действие Activity intentFilter динамическим из strings.xml - PullRequest
0 голосов
/ 02 января 2019

Я использую различные варианты продукта и открываю Activity через intentFilter, действие которого предварительно определено, как показано ниже.

<activity android:name=".MyActivity"
          android:screenOrientation="portrait">
    <intent-filter>
          <action android:name="com.package.name.MyAction"/>
          <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Для открытия этого упражнения я использую:

Intent intent = new Intent("com.package.name.MyAction");
startActivity(intent);

Теперь, если у моего устройства есть оба apk с ароматом продукта, для некоторых придет chooserустройство, чтобы открыть какое приложение активности, для некоторых устройств выдает ошибку no app found to perform the action.

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

Одно из решений, которое я решил преодолеть, - сделать действие постоянным как Intent intent = new Intent("com.package.name.MyAction"); context.startActivity(intent); динамическим.Но я не уверен, как я могу это сделать.

Я AndroidManifest, это должно быть что-то вроде:

<action android:name="com.package.name.MyAction"+getString(R.string.product_name)/>

В этой части я не могу получить строку в AndroidMaifest.

Для открытия действия, которое я сделал:

Intent intent = new Intent("com.package.name.MyAction"+getString(R.string.product_name));
startActivity(intent);

Любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 02 января 2019

В вашем build.gradle (приложении) настройте ваш вкус следующим образом:

    productFlavors {
        first {
            // ...
            manifestPlaceholders = [action: "com.package.name.ActionA"]
        }

        second {
            // ...
            manifestPlaceholders = [action: "com.package.name.ActionB"]
        }
    }

Затем поместите значение заполнителя в AndroidManifest.xml файл:

    <activity android:name=".MyActivity"
              android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="${action}"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </activity>

Чтобы заполнитель мог открыть действие, просто введите его через BuildConfig:

    String yourAction = BuildConfig.action;
    // start your intent here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...