String str = Locale.getDefault().getLanguage();
Log.i("my", str);
中文為 str ="cn";
英文為 str ="en";
日文為 str ="ja";
。。。。
寫個程序監控設置中語言變化
public class AndroidLanguageActivity extends Activity { class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if("Intent.ACTION_LOCALE_CHANGED".equals(intent.getAction())) { String str = Locale.getDefault().getLanguage(); Log.i("my", "changed "+str); } } } MyReceiver receiver; IntentFilter filter; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = new TestDrawView(this); // view.setBackgroundDrawable(getResources().getDrawable(R.drawable.xx)); setContentView(view); receiver = new MyReceiver(); filter = new IntentFilter("Intent.ACTION_LOCALE_CHANGED"); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); registerReceiver(receiver, filter); String str = Locale.getDefault().getLanguage(); Log.i("my", str); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); unregisterReceiver(receiver); } }
根據官方文檔指明,注冊廣播在onSume()中,解除注冊unregister(receiver);在onPause()中。
而且如果假設廣播只在本應用中的話推薦使用LocalBroadcastManager,因為它具有一下優點:
1 因廣播數據在本應用范圍內傳播,你不用擔心隱私數據泄露的問題。
2 不用擔心別的應用偽造廣播,造成安全隱患。
3 相比在系統內發送全局廣播,它更高效。