Android应用程序Locale以编程方式更改,但NotificationCompat以设备语言显示消息

时间:2014-09-14 14:15:21

标签: android

我有一个支持4种语言的应用程序。我允许用户从这种语言中进行选择,并使用以下代码更改语言:

    Locale locale_en = new Locale(locale);
    Locale.setDefault(locale_en);
    Configuration config_en = new Configuration();
    config_en.locale = locale_en;
    getBaseContext().getResources()
            .updateConfiguration(config_en, getBaseContext()
                    .getResources().getDisplayMetrics());

    recreate();

此外,每天我都会使用AlarmManager类使用此代码弹出提醒(使用NotificationCompat):

    Intent i = new Intent(context, NavigationActivity.class);
    PendingIntent resultPendingIntent =
            PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_launcher_v2)
                    .setContentTitle(context.getString(R.string.notification_title))
                    .setContentText(context.getString(R.string.notification_text))
                    .setContentIntent(resultPendingIntent)
                    .setAutoCancel(true);

    int mNotificationId = 001;
    NotificationManager mNotifyMgr =
            (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);

    mNotifyMgr.notify(mNotificationId, mBuilder.build());

问题:通知显示的语言不是用户从我的应用中选择的语言,但它显示在设备的语言中。 我可以使用不同语言的应用程序,但通知始终显示在设备语言中。

1 个答案:

答案 0 :(得分:3)

  

此外,每天我都会使用以下代码在NotificationCompat类中弹出提醒(使用AlarmManager):

您的流程早已终止,因此此代码正在以新的流程运行。您需要在此处应用相同的更新 - Locale逻辑,以及用户在用户界面中选择语言时。