设为首页 收藏本站
查看: 696|回复: 0

[经验分享] android上的i-jetty (2)用Servlet显示Android设备的app列表

[复制链接]

尚未签到

发表于 2017-2-27 12:34:44 | 显示全部楼层 |阅读模式
  环境 : android + i-jetty + servlet

DSC0000.gif DSC0001.gif 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
  显示结果:
DSC0002.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347998-1-1.html 上篇帖子: ubuntu手动安装jdk并配置jetty 下篇帖子: Maven pom文件 tomcat和jetty插件配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表