首先,只有通过android设备访问Android Market,过滤规则才会生效,过滤规则使得不同的设备在market上看见的app都不尽相同。 Android Market通过一个app(应用)触发的filters(过滤器)来决定该app是否对某台设备可见。若某app对某设备不可见,则无论该设备在Android Market上怎么搜索都搜不到该app,即使通过扫描二维码,或是直接进入该app的market链接,也会报告错误说找不到该app。 一个app可触发多个filters,它们的组合过滤效果是所有filters效果的“或”,例如,某app触发了“只支持API level 在2或者以上的设备”和“不支持小屏幕设备”两个filters,若该设备是小屏设备,即使它的API level 为3,也无法在Android Market上搜到该app。 filters由app的AndroidManifest.xml中设置的项来触发,但不是所有项都能触发filters,下面列举所有能触发filters的manifest项,并给出增强app可见性的建议 : 1, <supports-screens android:resizeable=["true" | "false"] android:smallScreens=["true" | "false"] android:normalScreens=["true" | "false"] android:largeScreens=["true" | "false"] android:xlargeScreens=["true" | "false"] android:anyDensity=["true" | "false"] /> 该项决定了app只能支持的设备的屏幕大小。如果多种大小被置为true,则app支持拥有其中最小尺寸的或更大尺寸的设备。 当API level在3或以下时,该设置项未定义,这时候market假定该app默认支持中屏或更大尺寸屏设备,也就是说该app对小屏设备不可见。 当API level在4或以上时,若不声明该项,则默认支持所有屏幕尺寸。 2, <uses-configuration android:reqFiveWayNav=["true" | "false"] android:reqHardKeyboard=["true" | "false"] android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"] android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"] android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] /> 该项决定了app只能支持的设备的键盘属性,例如: <uses-configuration android:reqFiveWayNav="true" android:reqTouchScreen="finger" android:reqKeyboardType="qwerty" /> <uses-configuration android:reqFiveWayNav="true" android:reqTouchScreen="finger" android:reqKeyboardType="twelvekey" /> 表示该app只支持这样的设备:拥有五向键键盘、可用手指控制的触屏屏幕,且拥有qwerty键盘或12键键盘。 3、 <uses-feature android:name="string"/> 该项决定了app只能支持某些拥有特定软硬件特性的设备,如: <uses-feature android:name="android.hardware.bluetooth" android:name="android.software.live_wallpaper"/> 表示app只支持配有蓝牙和支持动态桌面的设备。 4、 <uses-library android:name="string"/> 该项决定了app只能支持某些支持特定lib的设备,如: <uses-feature android:name="com.google.android.maps"/> 表示app对不支持google maps库的设备不可见。 5、 <uses-permission android:name="string"/> 该项定义了app的权限,权限不会直接触发filters,但某些权限被设置等同于某些<uses-feature>标签被设置,导致filters间接被触发,例如: 定义了<uses-permission android:name="android.permission.CAMERA"/>,等同于定义了 <use-feature android:name="android.harware.camera"/>,即使实际上没有声明<use-feature>项。这时候相应的filter就会被触发。 6, <uses-sdk android:minSdkVersion="integer"/> 该项表明app只能支持指定API level或以上的设备。 若该项没设置,则默认API level为1。 另外,SIM卡的有无、区域限制等也会影响app的可见性,但这些都是开发者不可控的,故不描述。

更多相关文章

  1. Android(安卓): 输入设备键值从底层到应用层的映射流程
  2. 鸿洋,郭霖:2020学会这几样,Android未来属于你!最新Android技术架构演
  3. 10个 iOS 用户暂可以嘲笑 Android(安卓)的特点
  4. Android(安卓)如何检索Android设备的唯一ID
  5. Android(安卓)Wear Preview- 创建通知(Creating Notifications fo
  6. Android(安卓)屏幕滑动事件
  7. Android(安卓)屏幕滑动事件
  8. android渲染网页时onPageFinished不触发解决方案
  9. Android-BLE低功耗蓝牙开发

随机推荐

  1. Android时间对话框
  2. android canvas中translate函数的使用
  3. 如何修改Android设备MTP name
  4. Android studio跳转界面
  5. android studio恢复误删文件
  6. Android Studio2.3 All com.android.supp
  7. android上小圆点page控件
  8. Android 系统源码分析之View(一)
  9. Android的Dialog和Toast
  10. Android(安卓)开源库之依赖注入