Эта вещь сбивает меня с толку ...
Я проверял свой код и решил изменить цель сборки с 2.3 на 2.2, чтобы убедиться, что каждый используемый мной API 2.3 обернут в хороший android.os.Build.VERSION.SDK_INT check.
Но где-то я делаю вызов java.text.Normalizer.normalize (), который не проверяет версию SDK.Любопытно, почему это не было найдено QA, я запустил приложение на телефоне 2.2 в режиме отладки и работает нормально !
Телефон LG-P505R версии 2.2.2.
Итак, почему этот телефон 2.2 может вызывать какой-то API, который был добавлен в 2.3?
Единственное логическое объяснение, о котором я могу подумать, это то, что производитель добавил этот API в Androidстек.
[Обновить] Больше безумия ...
Я тестировал этот код на 2.2.эмулятор и работает нормально:
public class NormalizerTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final String s = "This \"é\" will become an \"e\"";
final TextView tv = (TextView) findViewById(R.id.tv);
final String temp = Normalizer.normalize(s, Normalizer.Form.NFD);
final Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
final String strNormalized = pattern.matcher(temp).replaceAll("");
tv.setText(strNormalized);
}
}
![Emulator settings](https://i.stack.imgur.com/VRHdP.png)
![Results](https://i.stack.imgur.com/vCPD9.png)