Как определить HTC Sense?

Можно ли каким-то образом определить, работает ли мое приложение на HTC Sense?

В более общем плане проблема заключается в том, что у меня есть кнопка с настраиваемым пользователем. Это очень похоже на переключатель учетных записей в правом верхнем углу приложения Gmail. При нажатии или фокусировке кнопка имеет оранжевую подсветку. Но это плохо выглядит на HTC Sense, потому что стандартный цвет подсветки зеленый.

Ответ 1

Давайте посмотрим на строки android.os.Build. Я не уверен, что люди HTC используют комбинацию для обозначения устройства HTC.

Ответ 2

Здесь ссылка предлагающая способ обнаружения HTC Sense на устройстве, примерно на 1/3 пути обсуждения. Я тестировал на Desire и Desire Z.

Код ниже (от пользователя: David):

private static final String SENSE_UI_LAUNCHER_NAME = 
          "com.htc.launcher.Launcher"; 
    private static Boolean senseUI; 

    public static final boolean isSenseUI(Context context) {
        if (senseUI == null) {
            senseUI = false;
            PackageManager packageManager = context.getPackageManager();

            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            List<ResolveInfo> list = packageManager.queryIntentActivities(
                    intent, PackageManager.MATCH_DEFAULT_ONLY);
            for (ResolveInfo info : list) {
                if (info.activityInfo != null
                        && SENSE_UI_LAUNCHER_NAME
                                .equals(info.activityInfo.name)) {
                    senseUI = true;
                    break;
                }
            }
        }
        return senseUI;
    }

Ответ 3

Я думаю, что Android предоставил вам лучший способ решить эту проблему, чем сделать проверку на Sense, и она будет работать для каждого производителя устройства. HTC не единственный, кто изменил цвета на селекторах. Я думаю, что Sony Ericsson имеет прозрачный белый/синий, Motorola изменила его на красный в своем пользовательском интерфейсе MotoBlur, и Garmin-Asus изменил его на синий, чтобы назвать несколько.

Что вы должны сделать, это переопределить атрибут android:background на вашей кнопке изображения и использовать собственный вариант, вместо того чтобы полагаться на фреймворк вытяжка. Если вы еще не знакомы с ними, вы, вероятно, также захотите взглянуть на "Селекторы" при создании своего настраиваемого фона, поэтому вы все равно получаете нажатые/выбранные/не выбранные цветовые сигналы.

Если у вас есть несколько кнопок, на которые вы хотите сделать это, вы можете использовать стили и темы, чтобы помочь в этом. Двумя основными местами, которые вы хотите использовать в документации для Android, являются " Применение стилей и тем" и " Ресурсы стилей"

Надеюсь, что это поможет!

Ответ 4

Вы можете попытаться найти приложение HTC/Sense, основанное на структуре Rosie, и его нельзя удалить, или, может быть, сама инфраструктура Rosie будет достаточно. Этот поток показывает, как получить список установленных приложений.

Ответ 5

Я думаю, что следует придерживаться следующего подхода: мы определяем android:background, что-то вроде

<?xml version="1.0" encoding="UTF-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/pressed_application_background" />
    <item android:state_focused="true" android:state_window_focused="true" android:drawable="@drawable/focused_application_background" />
    <item android:state_focused="true" android:state_window_focused="false" android:drawable="@android:color/transparent" />
</selector>

Но здесь мы должны ссылаться на некоторые стандартные ресурсы, а не на изображения нашего приложения. Просто нужно выяснить, какие идентификаторы у них есть.

Ответ 6

Это немного поздно, но я думаю, что это решение может работать на некоторых случаях.

Я попытался использовать Build.MANUFACTURER, чтобы проверить, является ли это устройством HTC. Это решение не работает на некоторых устройствах, и мы можем гарантировать, что эти устройства работают Sense в любом случае

Если вы заметили, вы можете увидеть, что Play Store необходимо проверить, какие функции доступны на телефоне для отображения правильных приложений, а HTC Sense - одна из функций!

Чтобы получить все доступные функции:

public FeatureInfo[] getSystemAvailableFeatures(Context context) {
        FeatureInfo[] features = context.getPackageManager().getSystemAvailableFeatures();
        for (FeatureInfo f : features) {
            Log.d("Features", "feature " + f.name);
        }
        return features;
}

Это вернет что-то вроде этого:

com.example D/Features﹕ Feature android.hardware.wifi
com.example D/Features﹕ Feature android.hardware.location.network
com.example D/Features﹕ Feature com.sec.android.mdm
com.example D/Features﹕ Feature android.hardware.location
com.example D/Features﹕ Feature android.hardware.sensor.gyroscope
com.example D/Features﹕ Feature android.hardware.screen.landscape
com.example D/Features﹕ Feature com.htc.software.Sense5.0

Обратите внимание на последнюю строку! Вы можете использовать его для проверки версии HTC версии

Надеюсь, что это поможет