欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

java,

来源: javaer 分享于  点击 46403 次 点评:8

java,


 

怎样获得Android的User Agent呢,我在网上查了好长时间也没找到合适的解决方法,向大家求助。

收藏0 分享0 好评0 差评0

 

回复 引用 举报 返回顶部

eoeandroidzt

 

帮帮团

 

UID43043 精华0 帖子343 e望0 点 e币599 元 在线时间235 小时 

2#

 发表于 2011-3-7 10:46 |只看该作者

论坛里有几个人发了一些代码,如何获得UA,但是自己都实践过了一遍,一个都不行。最近做OPHONE的项目,跟移动终端的人打了不少交道,了解了一些相关知识,这里把权威的解决方案发布出来。 我不是方法的发明者,但是我是方法的实践者。顺便也在这里感谢相关的人。

 

原理:

 

OPHONE的UA存放位置:

1)OPHONE 1.0和1.5     存放于/opl/etc/properties.xml

1)OPHONE 2.0     存放于/opl/etc/product_properties.xml

 

大家可以通过下面的步骤自己查看:

1),连上手机,或者模拟器。

2),输入 adb shell

3),输入 cd opl

4),输入 cd etc

5),输入 cat properties.xml (或者cat product_properties.xml 【OPHONE2.0】)

 

结果如下图:

ophone.png (6 KB)

ophone ua

 

2010-08-24 14:09

 

以上就是properties.xml的内容,接下来就是获得这个UA,加到自己的联网请求里去。

我自己写了一个,适用于目前3个版本的OPHONE。

 

AndroidPlatform.java

 

package com.***.****;

 

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

 

 

public class AndroidPlatform  {

 

        public static final String KEYSTRING_USER_AGENT = "user_agent_key";

 

        public static String getUAFromProperties()

        {

                try {

                FileInputStream is = getPropertyStream();

                ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();

                        byte buf[] = new byte[1024];

                        for(int k = 0; -1 != (k = is.read(buf));)

                   bytearrayoutputstream.write(buf, 0, k);

 

                        String fileString = new String(bytearrayoutputstream.toByteArray(), "UTF-8");

 

                        return getProperties(KEYSTRING_USER_AGENT, fileString);

 

                //System.out.println("IS FILE Android Platform  " + bytearrayoutputstream.size() +  "  "+());

 

                } catch (Exception e) {

                        // TODO: handle exception

 

                        System.out.println("IS FILE erororo");

                        e.printStackTrace();

                }

                return null;

        }

 

 

 

        public static FileInputStream getPropertyStream()

        {

                try {

 

                        File property = new java.io.File("/opl/etc/properties.xml");

                        if(property.exists())

                        {

                                return new FileInputStream(new java.io.File("/opl/etc/properties.xml"));

                        }

                        else

                        {

                                property = new java.io.File("/opl/etc/product_properties.xml");

                                if(property.exists())

                                {

                                        return new FileInputStream(new java.io.File("/opl/etc/product_properties.xml"));

                                }

                                else

                                {

                                        return null;

                                }

                        }

 

                } catch (Exception e) {

                        // TODO: handle exception

                        e.printStackTrace();

                }

                return null;

        }

 

 

        public static String getProperties(String key, String content)

        {

                String STARTKEY = "<"+key+">";

                String ENDKEY = "</"+key+">";

                content = content.replace("\r", "");

                content = content.replace("\n", "");

 

                int startIndex = content.indexOf(STARTKEY) + STARTKEY.length();

                int endIndex = content.indexOf(ENDKEY);

                if(startIndex > -1 && endIndex > -1)

                {

                        return content.substring(startIndex, endIndex);

                }

                else

                return null;

        }

 

 

}

 

联网请求时,加入UA即可,这样就做到了自动适配了。具体如下:

 

private int CountMoneyCMWAPNEWWAY(String urlstr)

  {

 

          String strHead = "";

          try{

                  if(!GameLet._self.isNetworkCMWAPAvailable())

                  {

                          GameLet._self.ActiveNetWorkByMode("wap");

                          Thread.sleep(5000);

                  }

 

              int splashIndex = urlstr.indexOf("/", 7);

 

              String hosturl = urlstr.substring(7, splashIndex);

              String hostfile = urlstr.substring(splashIndex);

 

 

 

              HttpHost proxy = new HttpHost( "10.0.0.172", 80, "http");

              HttpHost target = new HttpHost(hosturl, 80, "http");         

 

              HttpParams httpParams = new BasicHttpParams();

              HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);

              HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);

              HttpConnectionParams.setSocketBufferSize(httpParams, 8192);

              HttpClientParams.setRedirecting(httpParams, true);

 

              String userAgent =  AndroidPlatform.getUAFromProperties();

 

              HttpProtocolParams.setUserAgent(httpParams, userAgent);

              DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);

 

              httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

 

              HttpGet req = new HttpGet(hostfile);

 

              HttpResponse rsp = httpclient.execute(target, req);

 

              HttpEntity entity = rsp.getEntity();

 

              InputStream inputstream = entity.getContent();

              ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();

              byte abyte1[] = new byte[1024];

              for(int k = 0; -1 != (k = inputstream.read(abyte1));)

                 bytearrayoutputstream.write(abyte1, 0, k);

 

              strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");

 

              httpclient.getConnectionManager().shutdown();   

 

              }

              catch (Exception e)        {

                      return 2;

              }

 

            if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)

            {

                  return 1;

            }

            else

            {

                  return 0;

            }

 

  }

上文转自http://www.eoeandroid.com/thread-38454-1-25.html

不知道对你是否有帮助

 

 

 

if(navigator.userAgent.match(/Android/i)) {  

   // Do something!  

   // Redirect to Android-site?  

   window.location = 'http://android.davidwalsh.name';  

 

 

 

 } 

 

 

 

 获取iPhone信息http://www.iteye.com/wiki/topic/828801

 

 http://blog.csdn.net/njchenyi/article/details/1909521

 

 

 如何获取android 1.5 的user age ...

相关文章

    暂无相关文章
相关栏目:

用户点评