如何检测HTC Sense?

时间:2010-09-09 13:26:52

标签: android android-ui

我可以以某种方式检测我的应用是否在HTC Sense上运行吗?

更一般地说,问题是,我有一个带有自定义drawable的Button。它与Gmail应用程序右上角的帐户切换器非常相似。按下或聚焦时,按钮具有橙色突出显示。但是在HTC Sense上看起来并不好看 - 因为标准的高亮颜色是绿色的。

6 个答案:

答案 0 :(得分:3)

让我们看看android.os.Build字符串我不知道HTC人员使用组合来表示HTC感应设备..

答案 1 :(得分:3)

这是link建议在设备上检测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;
    }

答案 2 :(得分:1)

我认为Android提供了一种更好的解决方法,而不是检查Sense,它适用于每个设备制造商。 HTC并不是唯一改变选择器颜色的人。我认为索尼爱立信有一个透明的白色/蓝色,摩托罗拉在他们的MotoBlur UI中将其改为红色,而Garmin-Asus将其改为蓝色,仅举几例。

您应该做的是覆盖图片按钮上的android:background属性并使用您自己的drawable而不是依赖于框架的背景 绘制。如果您还不熟悉它们,那么在创建自定义背景时,您可能还需要查看Selectors,这样您仍然可以获得按下/选中/未选择的颜色提示。

如果您要使用多个按钮,则可能需要使用样式和主题来帮助解决此问题。您要从Android文档中引用的两个主要位置是“Applying Styles and Themes”和“Style Resources

希望有所帮助!

答案 3 :(得分:0)

您可以尝试寻找依赖于Rosie框架并且无法卸载的HTC / Sense应用程序 - 或者Rosie框架本身存在就足够了。 This thread显示了如何获取已安装应用程序的列表。

答案 4 :(得分:0)

我认为应遵循以下方法 - 我们定义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>

但在这里我们应该参考一些标准资源,而不是我们应用程序的图像。只需要找出他们有哪些ID。

答案 5 :(得分:0)

这有点晚了,但我认为这个解决方案可能适用于某些人案例。

我尝试使用Build.MANUFACTURER来检查它是否是HTC设备。此解决方案在某些设备上不起作用,我们可以确保设备正在运行Sense

如果您注意到,您可能会看到Play商店需要检查手机上可用的功能以显示正确的应用,而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感知版

希望有所帮助