NameNotFoundException, когда я меняю значок и имя приложения с помощью псевдонима активности - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь изменить значок приложения и имя во время выполнения.

val pm = activity.packageManager
val packageName = BuildConfig.APPLICATION_ID

activity.packageManager.setComponentEnabledSetting(
    ComponentName(packageName, packageName + activeName),
    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
    PackageManager.DONT_KILL_APP)

for (i in disableNames.indices) {
try {
    activity.packageManager.setComponentEnabledSetting(
        ComponentName(packageName, disableNames[i]),
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP)
     } catch (e: Exception) {
         e.printStackTrace()
     }
}

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

Unable to start activity ComponentInfo{com.app.test.debug/com.app.test.presentation.ui.main.activity.MainActivity}: java.lang.IllegalArgumentException: android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{com.app.test.debug/com.app.test.presentation.ui.main.activity.MainActivity-default}

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


    <activity-alias
        android:exported="true"
        android:label="Default"
        android:icon="@mipmap/ic_launcher_red"
        android:name=".presentation.ui.main.activity.MainActivity-default"
        android:enabled="true"
        android:targetActivity="com.app.test.presentation.ui.main.activity.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

    <activity-alias
        android:exported="true"
        android:label="Second alias"
        android:icon="@mipmap/ic_launcher_green"
        android:name=".presentation.ui.main.activity.MainActivity-settings"
        android:enabled="false"
        android:targetActivity="com.app.test.presentation.ui.main.activity.MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

Вот так выглядит мой псевдоним активности

Проблема в этой части кода

   activity.packageManager.setComponentEnabledSetting(
                ComponentName(BuildConfig.APPLICATION_ID, "com.app.test.presentation.ui.main.activity.MainActivity-default"),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP)

Когда я удаляю эту часть, это помогает.Но теперь у меня есть две иконки: старая и новая.Старый значок не удаляется.

Логика:
1) Включить псевдоним активности.
2) Отключить старый псевдоним активности
3) Восстановить действие
4) Сбой java.lang.IllegalArgumentException: android.content.pm.PackageManager $ NameNotFoundException: ComponentInfo {com.app.test.debug / com.app.test.presentation.ui.main.activity.MainActivity-умолчанию}

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вы не делаете ничего плохого, у меня была такая же проблема.Удалось отладить только после создания совершенно нового действия с тем же кодом, чтобы получить сноване может быть найден и не может установить и заменить apk.когда вы удалили "COMPONENT_ENABLED_STATE_DISABLED" - вы совершили второе преступление - вы оставили 2 действия запущенными.в то время как разрешен только один.

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

0 голосов
/ 27 сентября 2018

я думаю, что вы не используете config манифеста для этого действия.

в манифесте должен установить псевдоним активности

как:

<activity-alias android:enabled=["true"|"false"]
 android:exported=["true"|"false"]
 android:icon="drawable"
 android:label="string resource"
 android:name="string resource"
 android:permission="string resource"
 android:targetActivity="string resource">

</activity-alias>

я нашел эта ссылка

и этот пример github

внимание:

это работает только в Java, если вы не хотитеиспользуйте kotlin, потому что в методе kotlin ComponentName () проверьте существующие входные файлы

используйте код Java и

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...