2010-09-09 8 views
10

¿Puedo de alguna manera detectar si mi aplicación se ejecuta en HTC Sense?Cómo detectar HTC Sense?

En términos más generales, el problema es que tengo un botón con dibujo personalizable. Es algo muy similar al conmutador de cuenta en la parte superior derecha de la aplicación Gmail. Cuando se presiona o se enfoca, el botón tiene resaltado naranja. Pero eso no se ve bien en HTC Sense porque el color de resaltado estándar es verde.

Respuesta

3

permite ver cadenas android.os.Build no estoy seguro de lo que la gente de HTC usan una combinación de indicar un dispositivo de HTC sentido ..

0

usted podría intentar buscar una aplicación HTC/sentido de que se basa en la Rosie y no se puede desinstalar, o tal vez el marco Rosie en sí mismo sea suficiente. This thread muestra cómo obtener una lista de aplicaciones instaladas.

+0

Y si vas con el método de Fred, es probable que pueda encontrar una ROM arrancado en XDA Developers para tirar de la cadena de acumulación. – Josiah

1

Creo que Android ha proporcionado una mejor manera para que usted resuelva esto que haciendo un cheque para Sense, y funcionará para cada fabricante de dispositivos. HTC no es el único que ha cambiado los colores en los selectores. Creo que Sony Ericsson tiene un blanco/azul transparente, Motorola lo cambió a rojo en su IU de MotoBlur, y Garmin-Asus lo cambió a azul en el suyo solo por nombrar algunos.

Lo que debe hacer es anular el atributo android:background en su botón de imagen y usar un dibujo propio en lugar de confiar en el fondo del marco dibujable. Si aún no está familiarizado con ellos, probablemente también desee echarle un vistazo al Selectors cuando crea su fondo personalizado, por lo que aún obtiene las indicaciones de color presionadas/seleccionadas/no seleccionadas.

Si tiene varios botones en los que desea hacer esto, puede usar estilos y temas para ayudar con esto. Los dos lugares principales que querrá referenciar de la documentación de Android son "Applying Styles and Themes" y "Style Resources"

Espero que ayude!

+0

En la pregunta estoy diciendo que utilizo un dibujante personalizado. El color de resaltado es naranja, que no se ve "nativo" en HTC Sense. No hay una manera fácil de resolver esto en Android, porque cada fabricante puede tener su propio estilo de interfaz de usuario ... :(Todo lo que puedo hacer es detectar si estoy en Sense y establecer el dibujable verde. Sé que hay otras personalizaciones de UI aparte de Sense, pero quiero tratar solo con Sense, porque está muy extendido. – fhucho

0

creo que el siguiente enfoque debe seguirse - definimos android:background, algo así como

<?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> 

Pero aquí debemos referirnos a algunos recursos estándar, no a las imágenes de nuestra aplicación. Solo necesito averiguar qué identificadores tienen.

+0

El dibujable que estoy usando no está incluido en Android. – fhucho

3

Aquí hay un link sugiriendo una forma de detectar HTC Sense en el dispositivo, alrededor de 1/3 de la discusión. He probado en el deseo y Desire Z.

Código está por debajo (de un usuario: 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; 
    } 
0

Esto es un poco tarde, pero creo que esta solución podría funcionar en algunos casos las personas.

Intenté utilizar Build.MANUFACTURER para comprobar si se trata de un dispositivo HTC. Esta solución no funciona en algunos dispositivos y podemos asegurarnos de que esos dispositivos ejecutan Sense de todos modos

Si lo nota, es posible que Play Store necesite verificar qué funciones están disponibles en el teléfono para mostrar las aplicaciones correctas, y HTC Sense es uno de las características!

Para obtener todas las características disponibles:

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

Esto devolverá algo como esto:

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 

Aviso de la última línea! Se puede utilizar para comprobar la versión de HTC sentido

creo que sirve

Cuestiones relacionadas