开发者

Android Settings LocalePicker on Honeycomb

I am implementing an app that uses the native language settings which can be accessed from: Menu > Settings > Language & Keyboard > Select Language > Locale

I can also open the Locale page directly using an intent which lists the languages by using the following code:

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

^-- code credit: Change language settings (locale) for the device

This works great on versions before Honeycomb. However the settings for Honeycomb has the little navigation area off to the left, like so:

Android Settings LocalePicker on Honeycomb

and when i execute the above code I get this error:

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

Any idea why this is happening? If i change "com.android.settings.LocalePicker" to "com.android.settings.Settings" it will open up the settings page to whatever setting you had last selected but if i try to change the classname to something like: "com.android.settings.Settings.LocalePicker" it blows up again. Here is some modified code which I'm using until this issue is resolved:

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);

Running code that does something different based on version number is not ideal, so if anyone knows how to fix this i would appreciate it.

Thanks!


Try this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜