Android вызывает OEM-активность по имени компонента - PullRequest
1 голос
/ 11 октября 2011

На Huwaie Ascend, когда мы проходим через меню настроек:

Settings -> SD card & phone storage -> Software Upgrade -> SD card Upgrade

Затем мы попадаем на экран, где пользователь может обновить.

И затем, используя adb logcat, мы видим это:

 Starting activity: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.SystemUpgradeCheck }

Мы можем использовать adb для симуляции этого, позвонив:

adb shell am start -n com.android.settings/.SystemUpgradeCheck

Это успешно, и мы видим экран.

Тем не менее, когда мы пытаемся вызвать это изнутри такой деятельности:

    Intent i = new Intent(Intent.ACTION_MAIN);
    i.setComponent(new ComponentName("com.android.settings", ".SystemUpgradeCheck"));
    startActivity(i);

Мы получаем эту ошибку:

Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/.SystemUpgradeCheck}; have you declared this activity in your AndroidManifest.xml?

Что мы можем сделать, чтобы преодолеть это? Я неправильно называю намерение?

1 Ответ

3 голосов
/ 12 октября 2011

Разобрался:)

Context foreignContext = createPackageContext("com.android.settings", Context.CONTEXT_IGNORE_SECURITY | Context.CONTEXT_INCLUDE_CODE);
Class<?> yourClass = foreignContext.getClassLoader().loadClass("com.android.settings.SystemUpgradeCheck");

Intent intent = new Intent(foreignContext, yourClass);
startActivity(intent);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...