更改设备语言时更新通知文本

4

我是Android开发的新手,有一个问题。

我正在为用户创建通知。这一切都很好。问题在于当我更改设备语言时,我的通知不会自动更新。我不知道是否有任何本地方法可以在Android上实现此功能。

目前,我的解决方案是:在创建通知时,我创建一个线程来验证语言是否已更改。如果是,则更新我的通知。当用户清除通知时,该线程停止。

所以,我不知道这是否是一个好的做法,或者是否还有其他方法可以做到这一点。

PS:该应用程序有许多strings.xml文件用于翻译字符串。我正在使用Thread类创建线程。

提前感谢您的帮助!抱歉我的英语不太好!

2个回答

0
在您的应用程序类中,您可以保留当前显示的通知 ID 及其信息的引用。您可以在 onConfigurationChanged(Configuration newConfig) 中检测语言更改并在那里更新您的通知。
public class App extends Application {
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        //update your notifications there is no need for a Thread
    }
}

另一种解决方案(真正的解决方案)

添加区域设置更改的接收器

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        //retrieve the list of notifications
        //update them (no need for thread)
    }
}

在你的清单文件中添加:

<receiver android:name="MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.LOCALE_CHANGED">
        </action>
    </intent-filter>
</receiver>

你好Sherif,感谢回答,但是它没有起作用。我应该在manifest.xml中写些什么吗?补充一下,我是从AsyncTask类中触发此通知的。我不知道这是否有任何区别。 - Felps
当您发送通知时,您需要将通知的ID保存在应用程序实例中。然后在onConfigurationChanged方法中,您需要使用这些ID来更新通知。 - Sherif elKhatib
我理解了,但这还不是重点。我无法在我的应用程序中保存notificationId,因为我将没有一个应用程序来更新通知。用户可以在更改设备语言之前停止应用程序,因此,在这种情况下,通知也不会被更新。我无法想象另一种方法来做到这一点,除非使用服务。但我不知道是否值得使用服务来更新通知。 - Felps
其实并没有什么特别的原因,但这种情况确实会发生。我只是想知道是否有其他方法可以实现我的需求。正如我之前所说,我认为唯一的方法是创建一个服务来处理它,但我想知道是否还有其他方法...实际上,你可以尝试在设备上截屏,然后更改语言,这就是同样的问题。 - Felps
你认为在更改语言后截图应该更改吗?我不明白你的意思! - Sherif elKhatib
显示剩余2条评论

0

很可能我没有正确理解您的问题。

由于您有许多strings.xml文件需要翻译字符串。
您只需要将它们放入相应的文件夹中:

res/values-pt-rPT //葡萄牙葡萄牙语
res/values-fr-rFR // 法国法语
res/values-fr-rCA // 加拿大法语

依此类推。


1
你好,ramaral。我会再次尝试解释一下。想象一下你有一个应用程序。然后该应用程序触发了一条通知。这个通知停留在状态栏中。好的,你让它停在那里,关闭了你的应用程序。通知仍然停留在那里。现在,试着去配置并更改设备语言。此时,设备已被更新并获取了新语言。去看看之前那个通知。它没有改变。它仍然使用上一种语言。如果我表达不清楚,请谅解。 - Felps

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接