Почему на моем телефоне Android 2.2 доступен java.text.Normalizer? - PullRequest
1 голос
/ 18 ноября 2011

Эта вещь сбивает меня с толку ...

Я проверял свой код и решил изменить цель сборки с 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

Results

Ответы [ 2 ]

0 голосов
/ 16 декабря 2012

подтвердил, что java.text.Normalizer отлично работает в эмуляторе vanilla API8. Просто добавьте подавление ошибок lint в код, чтобы затмение компилировалось.

0 голосов
/ 18 ноября 2011

Так что на данный момент мое единственное предположение - то, что он был обнародован в 2.3, но он был там все время ...

...