Настройки Android LocalePicker на Honeycomb - PullRequest
1 голос
/ 07 июля 2011

Я реализую приложение, которое использует настройки родного языка, к которым можно получить доступ из: Меню> Настройки> Язык и клавиатура> Выбрать язык> Язык

Я также могу открыть страницу Locale напрямую, используя намерение, в котором перечислены языки, используя следующий код:

Intent languageIntent = new Intent(Intent.ACTION_MAIN);
languageIntent.setClassName("com.android.settings", "com.android.settings.LocalePicker");
activity.startActivity(languageIntent);

^ - код кредита: Изменение языковых настроек (локали) для устройства

Отлично работает на версиях до Honeycomb. Однако настройки для Сота имеют небольшую область навигации слева, например так:

image

и когда я выполняю приведенный выше код, я получаю эту ошибку:

Starting: Intent { act=android.intent.action.MAIN cmp=com.android.settings/.LocalePicker } from pid 24294
FATAL EXCEPTION: main
android.content.ActivityNotFoundException: Unable to find explicit activity class {com.android.settings/com.android.settings.LocalePicker}; have you declared this activity in your AndroidManifest.xml?

Есть идеи, почему это происходит? Если я изменю «com.android.settings.LocalePicker» на «com.android.settings.Settings», он откроет страницу настроек для того параметра, который вы выбрали в последний раз, но если я попытаюсь изменить имя класса на что-то вроде: «com .android.settings.Settings.LocalePicker "снова взрывается. Вот некоторый модифицированный код, который я использую, пока эта проблема не будет решена:

Intent languageIntent = new Intent(Intent.ACTION_MAIN);
int currentApiVersion = android.os.Build.VERSION.SDK_INT;
final int HONEYCOMB = 11;
if (currentApiVersion < HONEYCOMB) // "HONEYCOMB" should be replaced with android.os.Build.VERSION_CODES.HONEYCOMB, but version code 'honeycomb' is not supported...
{
    languageIntent.setClassName("com.android.settings", "com.android.settings.LocalePicker");
}
else
{
    languageIntent.setClassName("com.android.settings", "com.android.settings.Settings");
}
activity.startActivityForResult(languageIntent, WtgActivity.LANGUAGE_CHANGE_REQUEST);

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

Спасибо!

1 Ответ

4 голосов
/ 18 июля 2011

Попробуйте это:

Intent languageIntent = new Intent(Settings.ACTION_LOCALE_SETTINGS);
startActivity(languageIntent);
...