android上的i-jetty (2)用Servlet显示Android设备的app列表

来源:互联网 发布:美国人饮食 知乎 编辑:程序博客网 时间:2024/06/07 06:15

环境 : android + i-jetty + servlet

MyServlet.java package com.synnex.servlet;  import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.List;  import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; import android.util.Log;  public class MyServlet extends HttpServlet {     private static final long serialVersionUID = -4258280559794945071L;     private final String TAG = "MyServlet";     private final String METHOD = "method";          private Context context;          public void init(ServletConfig config) throws ServletException     {         super.init(config);         context = (Context)config.getServletContext().getAttribute("org.mortbay.ijetty.context");         Log.v(TAG, "## init android context success ##");     }          protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException     {         String method = request.getParameter(METHOD);         if("listApp".equals(method))         {             response.setContentType("text/html; charset=UTF-8");             listApp(request, response);         }         else if("appIcon".equals(method))         {             appIcon(request, response);         }         else         {             response.setContentType("text/html; charset=UTF-8");             sayHello(request, response);         }     }      private void appIcon(HttpServletRequest request, HttpServletResponse response) throws IOException     {         response.setContentType("image/JPEG");         ServletOutputStream out = response.getOutputStream();         PackageManager pm = context.getPackageManager();         try         {             Drawable icon = pm.getApplicationIcon(request.getParameter("id"));             ByteArrayOutputStream baos = new ByteArrayOutputStream();             drawableToBitmap(icon).compress(Bitmap.CompressFormat.PNG, 100, baos);             byte[] b = baos.toByteArray();             out.write(b);             out.flush();         }         catch (NameNotFoundException e)         {             Log.e(TAG, "get app icon error : ", e);             out.write("error".getBytes("UTF-8"));         }         response.flushBuffer();     }      private void sayHello(HttpServletRequest request, HttpServletResponse response) throws IOException     {         PrintWriter writer = response.getWriter();         writer.write("Hello World!!!");         writer.flush();         response.flushBuffer();     }      private void listApp(HttpServletRequest request, HttpServletResponse response) throws IOException     {         Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);         mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);         List<ResolveInfo> apps = context.getPackageManager().queryIntentActivities(mainIntent, 0);         PackageManager pm = context.getPackageManager();                  StringBuilder buf = new StringBuilder(500);         buf.append("<table>")                 .append("<tr>")                     .append("<th>App Name</th>")                     .append("<th>App Version</th>")                     .append("<th>Package Name</th>")                     .append("<th>App Icon</th>")                 .append("</tr>");         String imgBaseUrl = request.getContextPath() + request.getServletPath() + "?" + METHOD + "=appIcon";         Log.v(TAG, imgBaseUrl);         for(ResolveInfo info : apps)         {             try             {                 PackageInfo appInfo = pm.getPackageInfo(info.activityInfo.packageName, 0);                 if((appInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0)                 {                     buf.append("<tr>")                         .append("<td>").append(appInfo.applicationInfo.loadLabel(pm)).append("</td>")                         .append("<td>").append(appInfo.versionName).append("</td>")                         .append("<td>").append(appInfo.packageName).append("</td>")                         .append("<td><img width='50px' height='50px' src='").append(imgBaseUrl).append("&id=").append(appInfo.packageName).append("'/></td>")                         .append("<td></td>")                         .append("</tr>");                 }             }             catch (NameNotFoundException e)             {                 Log.e(TAG, "get app info error: ", e);                 continue;             }         }                  buf.append("</table>");                  PrintWriter writer = response.getWriter();         writer.write(buf.toString());         writer.flush();         response.flushBuffer();     }      private static Bitmap drawableToBitmap(Drawable drawable)     {         int w = drawable.getIntrinsicWidth();         int h = drawable.getIntrinsicHeight();          Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 : Bitmap.Config.RGB_565;         Bitmap bitmap = Bitmap.createBitmap(w, h, config);         Canvas canvas = new Canvas(bitmap);         drawable.setBounds(0, 0, w, h);         drawable.draw(canvas);         return bitmap;     } }


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

显示结果: 

 

原创粉丝点击