Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3427249
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: Java

2010-11-29 17:07:14

1、Android Market上发软件要注意哪些问题


  很多网友可能都注册了Android Market账户,但发布一款软件如果要做到很周全需要考虑哪些问题呢?


  (一)、兼容性
  对于目前市面上Android设备品牌种类定位繁多,这里教程之家大致将这些分为几类:
  (1). 按操作系统区分,Android 1.5,1.6和Android 2.0,2.1或2.2等几个版本。
  (2). 按屏幕分辨率区分,目前WVGA是主流即480x800目前占了近一半,当然还有一部分HVGA的320x480大概有45%的份额,至于QVGA的一些低端机相对较少比如Moto ME511、HTC Tattoo、HTC Aria和HTC Bee这几款机型还是240x320的分辨率比较少。
  (3). 硬件或扩展库,比如需要扩展包WiFi、GPS、GSM/GPRS模块、OpenGL 3D硬件加速器的。
  面对上面的三种问题,这里eoe社区可以告诉大家一个简单的方法来处理比如说直接在androidmanifest.xml中设置,这样Google的Android Market就可以自适应了。面对以上问题,解决方法分别为
  (1). 重新配置use-sdk节点,比如仅仅让android 2.0到2.1之间的用户使用而2.2的用户无法使用,可以设置为 其中中间数字代表API Level,而maxSdkVersion属性在较早的SDK中不支持,可能ADT无法编译通过。
  (2). 分辨率我们可以添加supports-screens节点,比如兼容hvga和wvga的,可以这样写 这里small代表qvga,normal就是hvga,而large是wvga或fwvga,最后的密度还牵扯到LCD屏幕问题
  (3). 扩展库,比如我们用到google maps包,或中移动的oms库,可能需要 的字样,当然硬件的问题还可以引入特性节点 比如 < android:glEsVersion="0x00020000">
  android:name="android.hardware.camera" android:required="true"/> 这里就是我们的游戏需要OpenGL ES 2.0的版本,如果需要2.1则值为0x00020001,需要更高的固件才能支持,同时还必须要系统的摄像头硬件。
  详细的教程之家在这里给大家列出来:

  1. android.hardware.camera.autofocus
  2. android.hardware.camera.flash
  3. android.hardware.sensor.light //光线感应器
  4. android.software.live_wallpaper //动态壁纸
  5. android.hardware.sensor.proximity 距离感应器
  6. android.hardware.touchscreen.multitouch //多点触控
  7. android.hardware.telephony
  8. android.hardware.telephony.cdma
  9. android.hardware.telephony.gsm
复制代码

    (二)、软件的隐私问题


  尽量不要声明过多危险的permission,比如需要访问用户信息,联系人短信、通话记录、定位信息等等,对于一般的程序调试反馈,Google已经在Android 2.2的固件中加入了自动反馈和自己程序的logcat stack print功能,可以在Android Market的console后台查看。


    2.MATCH_PARENT是什么类型的布局

  有网友表示对于很多工程中的MATCH_PARENT出现在layout中感到不明白,过去只有FILL_PARENT和WRAP_CONTENT那 么 match_parent到底是什么类型呢? 其实从Android 2.2开始FILL_PARENT改名为MATCH_PARENT ,从API Level为8开始我们可以直接用MATCH_PARENT来代替FILL_PARENT,最后教程之家提醒大家,他们的定义本质是一样均为 -1,只是换了个别名,可能为了更准确些,比如最终在SDK中的定义为:
  1. fill_parent   -1  The view should be as big as its parent (minus padding). This constant is deprecated starting from API Level 8 and is replaced by match_parent.
  2. match_parent   -1 The view should be as big as its parent (minus padding). Introduced in API Level 8.
  3. wrap_content   -2  The view should be only big enough to enclose its content (plus padding).  
复制代码

    3.Android换行符变成方框的解决方法

      我们都知道Android是基于Linux内核的,在处理换行符时使用的是\n而Windows服务器处理换行符为\r\n这样的方式,对于显示\r 即回车符在Android上面可能就变成了黑色的方框或者说方块,我们在Android的TextView或EditView等文本显示控件上将\r\n 替换成\n即可。

    4.View的显示状态GONE,VISIBLE和INVISIBLE区别

      很多网友可能会发现View类的设置显示状态setVisibility方法有三种情况,分别为GONE、VISIBLE和INVISIBLE,它们之间到底有哪些区别呢? 教程之家给大家举个简单的例子。可能很多网友会发现有些Android应用的下面包含了AdMob或Adsense广告条,如果这个View 我们设置为GONE则消失,该广告条看不见也不占用位置。而INVISIBLE则代表广告条那块是空白,但仍然沾着他布局高和宽的位置,而VISIBLE 就是标准显示时的状态。

    5.android单实例运行方法

  我们都知道Android平台没有任务管 理器,而内部App维护者一个Activity history stack来实现窗口显示和销毁,对于常规从快捷方式运行来看都是startActivity可能会使用FLAG_ACTIVITY_NEW_TASK标 记来打开一个新窗口,比如Launcher,所以考虑单任务的实现方法比较简单,首先教程之家纠正下大家一种错误的方法就是直接在 androidmanifest.xml的application节点中加入android:launchMode="singleInstance"这 句,其实这样将不会起到任何作用,Apps内部维护的历史栈作用于Activity,我们必须在activity节点中加入 android:launchMode="singleInstance" 这句才能保证单实例,当然一般均加在主程序启动窗口的Activity。

    6.Droid2无法识别ADB问题解决方法

  目前来说Motorola Droid2手机无法识别ADB,虽然通过Moto自带的驱动安装可以在Windows XP/7上安装设备驱动,但在Eclipse中可以看到DDMS的Device Manager无法识别,这问题问题以往也出现过,主要原因是你当前的ADT插件版本太低,一般Google每次推出一个高版本的固件,比如 Android 2.2则对于ADT插件也将会升级使其一些特性将支持。

    7.ListView和ScrollView同时使用Bug

  很多网友可能发现ListView或ScrollView这样的组件放在一起套嵌会出现无法正常显示的bug,比如典型的例子就是ScrollView 中包含的ListView只能显示2行左右,而ListView中的数据肯定远大于2个,这样的问题教程之家推荐大 家可以通过重写 ListView的onMeasure方法来重新设置控件的显示高度,在onMeasure中我们使用setMeasuredDimension方法重新 设置控件的显示尺寸。同样对于部分网友提到的水平滚动 ListView仍然适用,当然可能还有一部分网友可能使用HorizontalScrollView来实现。

      8.px像素如何转为dip设备独立像素

  最近有网友问如何将px像素转为dip独立设备像素,由于Android的设备分辨率众多,目前主流的为wvga,而很多老的设备为hvga甚至低端 的 qvga,对于兼容性来说使用dip无非是比较方便的,由于他和分辨率无关和屏幕的密度大小有关,所以推荐使用,不过这里教程之家提示大家,ophone os的手机对于dip的支持糟糕透了,显示的结果会放大很多,同时黑色的主题会导致常规的黑色文字让用户无法分辨。

  px= (int) (dip*density+0.5f) //这里eoe社区提示大家很多网友获取density的方法存在问题,从资源中获取的是静态定义的,一般为1.0对于HVGA是正好的,而对于wvga 这样的应该从WindowsManager中获取,WVGA为1.5

       9.Android的Btimap处理大图片解决方法

  我们都知道Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOfMemoryError异常,我们解码一个图片为了防止内存不 足的异常我们可以使用BitmapFactory.Options 的udeinTempStorage属性解决,代码如下:
  1. BitmapFactory.Options cwj = new BitmapFactory.Options();
  2. cwj.inTempStorage = new byte[1024*1024*5]; //5MB的临时存储空间

  3. Bitmap bm = BitmapFactory.decodeFile(inputStream,cwj); //这里cwj为Options属性
复制代码

      10.android下解析xml文件遇到中文问题

  很多Android开发者可能一直抱怨xml解析库不够完善,对于国内很多server并不是标准的utf-8编码,遇到中文时可能解析器会停止或解析出来的是乱码。这里教程之家给大家说下常见的解决方法:

  (一)、android sax库遇到gbk或gb2312编码时
        方法1. 可以显示的指明编码比如:
  1. InputSource is = new InputSource(inputStream);
  2.     is.setEncoding("UTF-8");
复制代码

  方法2. 使用InputStreamReader转换

  在SDK中可以查看有这样实例化方法,参数二为字符集 InputStreamReader(InputStream in, Charset charset) 具体使用可以是 InputSource is=new InputSource(new InputStreamReader(inputStream,"gb2312"));

  有关InputSource的细节,我们遵循 如果有字符流可用,则解析器将直接读取该流,而忽略该流中找到的任何文本编码声明。如果没有字符流,但却有字节流,则解析器将使用该字节流,从而使 用在 InputSource 中指定的编码,或者另外(如果未指定编码)通过使用某种诸如 XML 规范 中的算法算法自动探测字符编码。如果既没有字符流,又没有字节流可用,则解析器将尝试打开到由系统标识符标识的资源的 URI 连接 。

  (二)、eoe社区推荐大家尽量在服务器上配置使用utf-8编码,虽然显示英文字符较为两非,但是兼容性是最好的,也是国际最主流的标准。
阅读(1464) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~