如何检查用户是否使用Android浏览器?

时间:2011-10-18 05:08:10

标签: java jquery jsp struts2

My Util.java包含以下方法:

public static boolean isAndroid(HttpServletRequest request) {
    boolean retVal = false;     
    String browser = request.getHeader("User-Agent");
    if (browser != null && !browser.trim().equals("") && browser.contains("Android")) {
        retVal = true;
    }       
    return retVal;
}

我在BaseAction.java下面的代码(它还有HttpServletRequest类型的请求变量)扩展了ActionSupport&实现ServletRequestAware,ServletResponseAware。

public boolean isAndroid(){
  return Util.isAndroid(request);
}

现在,我想检查JSP是否设备是android&如果它执行某些操作,那么我使用下面的代码:

<s:if test="%{#android=='false'}">
   <a href="/myUrl"></a>
</s:if>
<s:else>
  ....
</s:else>

但上面的代码似乎不起作用。可以任何一个人建议为什么它不工作&amp;如果有另一种方法来检查JSP以查看用户是否使用Android浏览器?

谢谢!

5 个答案:

答案 0 :(得分:3)

String userAgent = request.getHeader("User-Agent");
boolean isAndroid = (userAgent != null && !userAgent.isEmpty() && userAgent.toLowerCase().contains("android"));

答案 1 :(得分:1)

在jsp中

<c:set var="browser" value="${header['User-Agent']}" scope="session"/>

答案 2 :(得分:1)

您要与字符串"false"进行比较,但应检查实际的布尔值,并可根据需要使用<s:if test="android"><s:if test="!android">

此外,您使用#为属性名称添加前缀,这对于推送到堆栈的值不是必需的 - #字符仅用于名为堆栈上下文中的值。

所有这一切,为什么这么做呢?

答案 3 :(得分:0)

我认为以下javascript代码会对您有所帮助;

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
// Do some action you want to!
}

看看吧..

感谢。

答案 4 :(得分:0)

这是您在这里使用的EL吗?我记得$是我们在EL中使用的字符,而不是代码中的%字符。在与android属性进行比较时,我认为你不需要使用带有'false'的单引号。所以我认为这应该有效。但请检查您是否可以先在页面中访问“android”变量。检查以下代码是否有效。

<s:if test="${android eq false}">
   <a href="/myUrl"></a>
</s:if>

OR

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<s:if test="${fn:contains(header['User-Agent'],'Android'}">
   <a href="/myUrl"></a>
</s:if>