使用User Agent分辨出Android设备类型的安全做法
随着Android设备增多,不少网站都开始设备Android设备,而Android主流设备类型以手机和平板为主。网站在适配时通过User Agent(用户代理,以下简称UA)又如何区分呢,本文部分内容翻译自Google官方博客Mo' better to also detect “mobile” user-agent。
一针见血
标准判断规则:Mobile Android has “Mobile” string in the User-Agent header. Tablet Android does not.
在Android设备UA字符串中,移动设备包含Mobile字符串,而平板设备没有。
旁征博引
在最初的Android设备(即手机)中UA字符串中包含着android,所以那时候可以使用检测UA字符串中是否包含(不区分大小写)android来判断。
但是后来一个新的Android设备出现了,就是Android平板,不幸的是,Android平板上的UA也包含android,而对于平板上更适合展示桌面(PC)的网页版式。而如果仅仅以上述的判断规则,会给平板用户带来不是很好的用户体验。
鉴于上述问题,Google的Android工程师提出了一个解决方案。对于引导到移动版式的设备,即手机,需要从UA字符串中同时判断是否包含mobile和android这两个单词。我们先看一些示例。
Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13
因为这个UA字符串中没有mobile,所以需要把它引导到桌面版式(或者一个为Android大屏设备定制的版式)。从这个UA字符串中我们可以了解到,它来自一个大屏设置,即摩托罗拉的XOOM平板。
我们再看另一个UA字符串
Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
包含了mobile和android,所以把这台Nexus One手机导向到移动版式吧。
相信通过上面两个UA字符串对比,你发现了UA的一些共性了吧,我们看看这些共性吧。
最后
所以,当你依据检测UA来判断Android手机设备,请同时检查android和mobile两个字符串。
相关推荐
-
Android中修改设备权限的方法
本文实例讲述了Android中修改设备权限的方法.分享给大家供大家参考.具体如下: 有时我们编写了驱动后,在上层程序中要访问设备,但android代码编译后的设备权限是root的,其他用户不可访问(包括system),只是就需要在android源码中将设备的权限修改下. 具体的修改位置为源码的system/core/init/devices.c文件中static struct perms_ devperms[]的定义中,如添加设备hidraw0的权限,只需添加一行: 复制代码 代码如下: { "
-
Android中获取设备的各种信息总结
一.屏幕分辨率 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; 或者: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getM
-
python获取android设备的GPS信息脚本分享
在android上,我们可以使用QPython来编写.执行Python脚本.它对很多android 系统函数进行了方便的封装,使用QPython编写功能简单的小程序异常方便. 这个示例是我之前用来读取手机位置信息并作为进一步处理数据的基础脚本. 复制代码 代码如下: # -*- coding: utf-8 -*- import androidhelper import time from math import radians droid = androidhelper.Android() dr
-
android 获取本机的IP地址和mac物理地址的实现方法
获取本机IP地址 public String getLocalIpAddress() { WifiManager wifiManager = (WifiManager) getSystemService(android.content.Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); try { return In
-
Android 进入设备后台data文件夹的办法
大家都知道,我们在进行android项目开发时,当涉及到需要存取数据,也就是需要进行数据的互动时,我们就需要把数据存放在虚拟设备的data 文件夹中.之前在相关书籍中了解到如何把文件上传到设备,如前面所说的mp3,mp4播放器中需要上传到设备中的音频及视频文件.方法如下:C:> adb push c:codesamplevideo.mp4 /data/samplevideo.mp4 今天在网上无意中又了解到了如何进入设备的后台的命令,希望对大家有帮助. 可以使用 adb shell 进入设备后台
-
Android手机获取IP地址的两种方法
1.使用WIFI 首先设置用户权限 复制代码 代码如下: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <
-
android 使用uinput模拟输入设备的方法
在google remote中,android接收端接收socket发来的IR CODE,然后将IR CODE模拟出来发给系统处理,这就是google remote接收端的原理. 系统端怎样模拟input event呢? 方法一:通过Instrumentation.sendKeyDownUpSync 实现,简单使用但是问题在于sendKeyDownUpSync发出的event,无法运行到interceptKeyBeforeDispatching,也就无法正常作用 HOME,VOL...方法二:通
-
设置Android设备WIFI在休眠时永不断开的代码实现
MainActivity如下: package cc.ab; import android.os.Bundle; import android.provider.Settings; import android.app.Activity; /** * Demo描述: * 设置设备在睡眠期间始终保持WLAN开启. * * 参考资料: * 1 http://stackoverflow.com/questions/8652031/how-to-modify-wi-fi-sleep-policy-pro
-
android手机获取gps和基站的经纬度地址实现代码
复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" an
-
Android编程获取设备MAC地址的实现方法
本文实例讲述了Android编程获取设备MAC地址的实现方法.分享给大家供大家参考,具体如下: /** * 获取设备的mac地址 * * @param ac * @param callback * 成功获取到mac地址之后会回调此方法 */ public static void getMacAddress(final Activity ac, final SimpleCallback callback) { final WifiManager wm = (WifiManager) ac .get
-
asp.net 通过UserAgent判断智能设备(Android,IOS)
最近一直在升级公司的手机站点,出了个触屏版专用的,做好后,就尝试通过 Agent 来判断相应的智能手机设备,然后跳转到新的手机站点经过不懈的努力,终于搜集了比较全的 智能设备 的 Agent,然后又写了程序,直接上代码吧 ,希望能帮助到你 复制代码 代码如下: /// <summary> /// 根据 Agent 判断是否是智能手机 /// </summary> /// <returns></returns> public static bool Check
-
Android中查看USB连接的外接设备信息的代码实例
1,USB存储设备(如:U盘,移动硬盘): //USB存储设备 插拔监听与 SD卡插拔监听一致. 复制代码 代码如下: private USBBroadCastReceiver mBroadcastReceiver; IntentFilter iFilter = new IntentFilter(); iFilter.addAction(Intent.ACTION_MEDIA_EJECT); iFilter.addAction(Intent.ACTION_MEDIA_MO
-
android实现获取有线和无线Ip地址的方法
本文实例讲述了android实现获取有线和无线Ip地址的方法.分享给大家供大家参考.具体如下: 做android的开发时,遇到了获取有线ip地址的问题.不多说 上代码! for (Enumeration<NetworkInterface> en = NetworkInterface .getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); if (intf.getNam
随机推荐
- perl 基本语法介绍
- 高性能WEB开发 web性能测试工具推荐
- jquery中添加属性和删除属性
- 详解Ubuntu14.04桥接网络设置与SSH登陆
- SVN出现提示org.apache.subversion.javahl.ClientException: Attempted to lock an already-locked dir解决方案
- WEB 前端开发中防治重复提交的实现方法
- PHP的Laravel框架中使用消息队列queue及异步队列的方法
- PHP实现的带超时功能get_headers函数
- Android仿微信底部按钮滑动变色
- Struts2 ActionContext 中的数据详解
- 详解Linux下随机生成密码的命令总结
- SQLServer 循环批处理
- 使MySQL查询区分大小写的实现方法
- VC++获得当前进程运行目录的方法
- jQuery延迟加载图片插件Lazy Load使用指南
- jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
- jQuery Ajax 实例全解析
- 用js模拟JQuery的show与hide动画函数代码
- 为高负载网络优化Nginx和Node.js的方法
- android使用DataBinding来设置空状态