2011-04-02 35 views
1

使用Adobe AIR for Android,我想找到区分手机和平板电脑的方法。我能找到的最接近的是检测dpi。 (我的手机dpi是254,我的平板电脑是149),但这会是可靠的还是有更好的方法?如何区分手机和平板电脑

(我一直在使用计算器了一段时间,但是这是我的第一篇 - YIPPEE !!)

回答

1

,但要去可靠

绝对不是。 T-Mobile G1将会是这种措施的一款平板电脑。

有没有更好的方法?

坦率地说,您不应该关心Android设备是电话,平板电脑,电视,烤面包机,望远镜还是厕所。

应该关心特性和能力。

例如,如果你在屏幕尺寸方面考虑平板电脑,使用<supports-screens>-large-xlarge资源集(例如,res/layout/正常的东西,res/layout-large/对于更大的屏幕尺寸)。

或者,如果您在考虑是否可以拨打电话,请在PackageManager上使用<uses-feature>hasSystemFeature()

+0

我正在使用Adobe AIR for Android,我无法访问这些属性。如果我正在编写原生Android应用程序,我可以这样做。 我担心的原因是我想允许平板电脑版本旋转,但不是电话。我需要一个屏幕上的状态栏和一个横向的手机,它占用了太多的房地产,并使游戏区太小。 – cdotspace 2011-04-02 15:42:20

+1

@cdotspace:如果Adobe AIR无法检测屏幕大小并对其做出反应,那么Adobe AIR尚未准备好迎接黄金时段。请记住,如果您知道密度并知道分辨率,那么您就知道尺寸 - 分辨率/密度=尺寸。 – CommonsWare 2011-04-02 16:55:35

+0

AIR有能力检测并对屏幕尺寸做出反应,问题是平板电脑的可靠测试?这听起来像你说'是'。 我同意Flash尚未准备好黄金时段,但在使用我的Xoom一个星期后,我会对目前可用的Android平板电脑说同样的话。 – cdotspace 2011-04-04 12:52:13

0

无论设备是平板还是不意味着...

一...它运行Honeycomb平板电脑版本(Android 3.0)吗?你可以使用System.getProperty()来获取这些信息。

两个....它是平板大小?即屏幕尺寸更大?但要记住一些平板电脑并不是那么大。处理这些问题的最佳方法是为每个设备大小分配资源。

我会说一般来说,尝试将Android平板电脑定义为特定组是一个糟糕的想法,因为现在有很多种类,而且很多品种都将出现。因此,通常最好构建您的应用程序,以便处理不同的屏幕尺寸,不同的操作系统版本以及可用或不存在的不同功能(例如GPS,键盘等)。

+0

我正在构建的应用程序使用流体布局(它实际上是Mac/Win桌面,iOS/Android手机/平板电脑和Web的一个源代码),它只是主要内容区域太小一个电话在风景中。我决定让用户决定,如果他们不喜欢,他们可以旋转回肖像。(苹果很可能会拒绝它,但我并不真正关心iPhone)。 – cdotspace 2011-04-04 12:56:30

0

cdotspace,不用担心真实的DPI,你只需要获取当前虚拟DPI:

int virtual_dpi=webview1.getResources().getDisplayMetrics().densityDpi; 

当前虚拟DPI意味着每个虚拟英寸点数。例如,htc欲望hd的真实宽度是2.21英寸,但其虚拟宽度仍然是2英寸,星系标签10.1的真实宽度是5.35英寸(纵向),但其虚拟宽度是5英寸。

int portrait_width_pixel=Math.min(this.getResources().getDisplayMetrics().widthPixels, this.getResources().getDisplayMetrics().heightPixels); 
int dots_per_virtual_inch=this.getResources().getDisplayMetrics().densityDpi; 
float virutal_width_inch=portrait_width_pixel/dots_per_virtual_inch; 
if (virutal_width_inch<=2) 
    {//is phone 
    } 
else 
    {//is tablet 
    }