环境 : android + i-jetty + servlet

MyServlet.java 1 packagecom.synnex.servlet;
2
3 importjava.io.ByteArrayOutputStream;
4 importjava.io.IOException;
5 importjava.io.PrintWriter;
6 importjava.util.List;
7
8 importjavax.servlet.ServletConfig;
9 importjavax.servlet.ServletException;
10 importjavax.servlet.ServletOutputStream;
11 importjavax.servlet.http.HttpServlet;
12 importjavax.servlet.http.HttpServletRequest;
13 importjavax.servlet.http.HttpServletResponse;
14
15 importandroid.content.Context;
16 importandroid.content.Intent;
17 importandroid.content.pm.ApplicationInfo;
18 importandroid.content.pm.PackageInfo;
19 importandroid.content.pm.PackageManager;
20 importandroid.content.pm.PackageManager.NameNotFoundException;
21 importandroid.content.pm.ResolveInfo;
22 importandroid.graphics.Bitmap;
23 importandroid.graphics.Canvas;
24 importandroid.graphics.PixelFormat;
25 importandroid.graphics.drawable.Drawable;
26 importandroid.util.Log;
27
28 public classMyServlet extendsHttpServlet
29{
30 private static final longserialVersionUID=-4258280559794945071L;
31 private finalStringTAG="MyServlet";
32 private finalStringMETHOD="method";
33
34 privateContextcontext;
35
36 public voidinit(ServletConfigconfig) throwsServletException
37{
38 super.init(config);
39context=(Context)config.getServletContext().getAttribute("org.mortbay.ijetty.context");
40Log.v(TAG,"##initandroidcontextsuccess##");
41}
42
43 protected voidservice(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException
44{
45Stringmethod=request.getParameter(METHOD);
46 if("listApp".equals(method))
47{
48response.setContentType("text/html;charset=UTF-8");
49listApp(request,response);
50}
51 else if("appIcon".equals(method))
52{
53appIcon(request,response);
54}
55 else
56{
57response.setContentType("text/html;charset=UTF-8");
58sayHello(request,response);
59}
60}
61
62 private voidappIcon(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException
63{
64response.setContentType("image/JPEG");
65ServletOutputStreamout=response.getOutputStream();
66PackageManagerpm=context.getPackageManager();
67 try
68{
69Drawableicon=pm.getApplicationIcon(request.getParameter("id"));
70ByteArrayOutputStreambaos= newByteArrayOutputStream();
71drawableToBitmap(icon).compress(Bitmap.CompressFormat.PNG,100,baos);
72 byte[]b=baos.toByteArray();
73out.write(b);
74out.flush();
75}
76 catch(NameNotFoundExceptione)
77{
78Log.e(TAG,"getappiconerror:",e);
79out.write("error".getBytes("UTF-8"));
80}
81response.flushBuffer();
82}
83
84 private voidsayHello(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException
85{
86PrintWriterwriter=response.getWriter();
87writer.write("HelloWorld!!!");
88writer.flush();
89response.flushBuffer();
90}
91
92 private voidlistApp(HttpServletRequestrequest,HttpServletResponseresponse) throwsIOException
93{
94IntentmainIntent= newIntent(Intent.ACTION_MAIN, null);
95mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
96List<ResolveInfo>apps=context.getPackageManager().queryIntentActivities(mainIntent,0);
97PackageManagerpm=context.getPackageManager();
98
99StringBuilderbuf= newStringBuilder(500);
100buf.append("<table>")
101.append("<tr>")
102.append("<th>AppName</th>")
103.append("<th>AppVersion</th>")
104.append("<th>PackageName</th>")
105.append("<th>AppIcon</th>")
106.append("</tr>");
107StringimgBaseUrl=request.getContextPath()+request.getServletPath()+"?"+METHOD+"=appIcon";
108Log.v(TAG,imgBaseUrl);
109 for(ResolveInfoinfo:apps)
110{
111 try
112{
113PackageInfoappInfo=pm.getPackageInfo(info.activityInfo.packageName,0);
114 if((appInfo.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM)<=0)
115{
116buf.append("<tr>")
117.append("<td>").append(appInfo.applicationInfo.loadLabel(pm)).append("</td>")
118.append("<td>").append(appInfo.versionName).append("</td>")
119.append("<td>").append(appInfo.packageName).append("</td>")
120.append("<td><imgwidth='50px'height='50px'src='").append(imgBaseUrl).append("&id=").append(appInfo.packageName).append("'/></td>")
121.append("<td></td>")
122.append("</tr>");
123}
124}
125 catch(NameNotFoundExceptione)
126{
127Log.e(TAG,"getappinfoerror:",e);
128 continue;
129}
130}
131
132buf.append("</table>");
133
134PrintWriterwriter=response.getWriter();
135writer.write(buf.toString());
136writer.flush();
137response.flushBuffer();
138}
139
140 private staticBitmapdrawableToBitmap(Drawabledrawable)
141{
142 intw=drawable.getIntrinsicWidth();
143 inth=drawable.getIntrinsicHeight();
144
145Bitmap.Configconfig=drawable.getOpacity()!=PixelFormat.OPAQUE?Bitmap.Config.ARGB_8888:Bitmap.Config.RGB_565;
146Bitmapbitmap=Bitmap.createBitmap(w,h,config);
147Canvascanvas= newCanvas(bitmap);
148drawable.setBounds(0,0,w,h);
149drawable.draw(canvas);
150 returnbitmap;
151}
152}

在浏览器中输入:http://{android_ip}:8080/MyServlet?method=listApp

显示结果:

android上的i-jetty (2)用Servlet显示Android设备的app列表_第1张图片

更多相关文章

  1. android学习日记01-搭配开发环境
  2. android SDK安装后设置环境变量
  3. Ubuntu10.04 64(32)位 android开发环境建立
  4. ubuntu10.04系统android开发环境配置
  5. Android 设备指纹

随机推荐

  1. Hybrid App开发问题记录
  2. android中设置全屏的方法
  3. Button、选择框、日期、时间控件
  4. android JNI之 'GetObjectClass' in some
  5. 免费学习android开发技术分享
  6. Android深入理解Context–Context使用的
  7. Android设计思想
  8. android 关于Only the original thread t
  9. 修改官方Twitter For Android,自定义 API
  10. Android View 相关源码分析之五 Relative