2010-09-09 4 views
10

Puis-je détecter si mon application fonctionne sur HTC Sense?Comment détecter HTC Sense?

Plus généralement, le problème est que j'ai un bouton avec dessin personnalisable. C'est quelque chose de très similaire au sélecteur de compte en haut à droite de l'application Gmail. Lorsqu'elle est enfoncée ou mise au point, le bouton est surligné en orange. Mais cela n'a pas l'air sympa sur HTC Sense - car la couleur de surbrillance standard est verte.

Répondre

3

permet de voir des chaînes android.os.Build Je ne suis pas sûr de ce que les gens utilisent une combinaison HTC pour indiquer un dispositif de détection de HTC ..

0

Vous pouvez essayer la recherche d'un HTC/application Sense qui repose sur la Rosie framework et ne peut pas être désinstallé - ou peut-être que le framework Rosie lui-même serait suffisant. This thread montre comment obtenir une liste des applications installées.

+0

Et si vous allez avec la méthode de Fred, vous pouvez probablement trouver une ROM déchiré sur XDA Developers pour tirer la chaîne de construction de. – Josiah

1

Je pense qu'Android vous a fourni un meilleur moyen de résoudre ce problème que de faire une vérification de Sense, et cela fonctionnera pour tous les fabricants d'appareils. HTC n'est pas le seul à avoir changé les couleurs des sélecteurs. Je pense que Sony Ericsson a un blanc/bleu transparent, Motorola l'a changé en rouge dans leur interface MotoBlur, et Garmin-Asus l'a changé en bleu dans le leur pour n'en nommer que quelques-uns. Ce que vous devez faire est substituer l'attribut android:background sur votre bouton image et utiliser un drawable de votre propre au lieu de compter sur l'arrière-plan du cadre. Si vous ne les connaissez pas déjà, vous voudrez probablement jeter un coup d'œil à Selectors lorsque vous créez votre arrière-plan personnalisé, afin d'obtenir toujours les repères de couleur pressés/sélectionnés/non sélectionnés.

Si vous avez plusieurs boutons sur lesquels vous souhaitez effectuer cette opération, vous pouvez utiliser des styles et des thèmes pour vous aider. Les deux principaux endroits que vous souhaitez consulter à partir de la documentation Android sont "Applying Styles and Themes" et "Style Resources"

Espérons que cela aide!

+0

Dans la question, je dis que j'utilise un dessinable personnalisable. La couleur de surbrillance est orange qui ne semble pas "native" dans HTC Sense. Il n'y a pas de moyen facile de résoudre cela dans Android, car chaque fabricant peut avoir son propre style d'interface utilisateur ... :(Tout ce que je peux faire est de détecter si je suis sur Sense et définir le vert drawable.Je sais qu'il existe d'autres personnalisation de l'interface utilisateur en dehors de Sense, mais je veux traiter avec Sense seulement, parce qu'il est si répandu – fhucho

0

Je pense que l'approche suivante devrait être suivie - nous définissons android:background, quelque chose comme

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

Mais nous devrions nous référer à des ressources standards, pas aux images de notre application. Juste besoin de savoir quels identifiants ils ont.

+0

Le drawable que j'utilise n'est pas inclus dans Android. – fhucho

3

Voici un link suggérant un moyen de détecter HTC Sense sur l'appareil, à environ 1/3 de la fin de la discussion. Je l'ai testé sur Z. Desire et Desire

code

est ci-dessous (d'un utilisateur: 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

C'est un peu en retard, mais je pense que cette solution pourrait fonctionner sur certains cas de personnes.

J'ai essayé d'utiliser Build.MANUFACTURER pour vérifier s'il s'agit d'un appareil HTC. Cette solution ne fonctionne pas sur certains appareils et nous pouvons nous assurer que ces appareils fonctionnent Sense de toute façon

Si vous remarquez, vous pouvez voir Play Store doit vérifier quelles fonctionnalités disponibles sur le téléphone pour afficher les applications correctes, et HTC Sense est un des fonctionnalités!

Pour obtenir toutes les fonctionnalités disponibles:

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

Cela renverra quelque chose comme ceux-ci:

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 

Notez la dernière ligne! Vous pouvez l'utiliser pour vérifier HTC version sens

Hope it helps