android 特殊手机终端创建一个服务器 对外公开地址(生成一个二维码的地址) 扫码识别点开为一个web 页面,可以下载本地的相关资源 或者播放本地的资源

使用NanoHttpd在Android项目中搭建服务器

android 服务器播放视频
其实都大同小异

也可以这种搭建服务器
AndServer,一个Android端的web服务器
这种比较繁琐

我的包直接用的 [android 服务器播放视频] 项目里面的lib

package com.pad.ui.activity.progressbar;import android.util.Log;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.List;import fi.iki.elonen.NanoHTTPD;import fi.iki.elonen.NanoHTTPD.Response.Status;public class FileServer extends NanoHTTPD{    public static final int DEFAULT_SERVER_PORT= 8080;//为8080    public static final String TAG = FileServer.class.getSimpleName();    //根目录    private static  final String REQUEST_ROOT = "/";    private List fileList;//用于分享的文件列表    public FileServer(List fileList) {        super(DEFAULT_SERVER_PORT);        this.fileList = fileList;    }    @Override    public Response serve(IHTTPSession session) {        Log.d(TAG,"OnRequest: "+session.getUri());        if(REQUEST_ROOT.equals(session.getUri())||session.getUri().equals("")){            return responseRootPage(session);        }        return responseFile(session);//        return response404(session,session.getUri());    }    //对于请求根目录的,返回分享的文件列表    public Response responseRootPage(IHTTPSession session) {        StringBuilder builder = new StringBuilder();        builder.append("");        builder.append("
    "); for (int i = 0, len = fileList.size(); i < len; i++) { File file = new File(fileList.get(i).getPath()); if (file.exists()) { //文件及下载文件的链接,定义了一个文件类,这里使用getPath方法获得路径,使用getName方法获得文件名 builder.append("
  1. " + file.getName() + "
  2. "); } } builder.append("
  3. File Size: " + fileList.size() + "
  4. "); builder.append("
"); builder.append("\n"); //回送应答 return new Response(String.valueOf(builder)); } //对于请求文件的,返回下载的文件 public Response responseFile(IHTTPSession session){ try { //uri:用于标示文件资源的字符串,这里即是文件路径 String uri = session.getUri(); FileInputStream fis = new FileInputStream(uri); return new Response(Status.OK,"application/octet-stream",fis); } catch (FileNotFoundException e) { e.printStackTrace(); } return response404(session,null); } public Response response404(IHTTPSession session,String url) { StringBuilder builder = new StringBuilder(); builder.append(""); builder.append("Sorry, Can't Found "+url + " !"); builder.append("\n"); return new Response(builder.toString()); }}

activity 主要实现 服务的开启与关闭 随带吧url 生成二维码方便外部访问下载 (同一局域网访问下载)

   private static final String DEFAULT_FILE_PATH = Environment.getExternalStorageDirectory() + "/movie.mp4";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ipStr = getIpAddress(ProgressBarActivity.this);        String macStr = getMacAddressFromIp(ProgressBarActivity.this);        showIp.setText("IP : " + ipStr);        mVideoServer = new VideoServer(DEFAULT_FILE_PATH, VIDEO_WIDTH, VIDEO_HEIGHT, VideoServer.DEFAULT_SERVER_PORT);        showIp.setText("请在远程浏览器中输入:\n\n" + ipStr + ":" + VideoServer.DEFAULT_SERVER_PORT);        List sharedFileList = new ArrayList<>();        SharedFile sharedFile = new SharedFile();        sharedFile.setName("movie.mp4");        sharedFile.setPath(DEFAULT_FILE_PATH);        sharedFileList.add(sharedFile);        SharedFile sharedFile01 = new SharedFile();        sharedFile01.setName("人员.xlsx");        sharedFile01.setPath(Environment.getExternalStorageDirectory() + "/mo.xlsx");        sharedFileList.add(sharedFile01);        fileServer = new FileServer(sharedFileList);        handler.post(new Runnable() {            @Override            public void run() {                Bitmap qrccode = QRCodeEncoder.syncEncodeQRCode(ipStr + ":" + VideoServer.DEFAULT_SERVER_PORT+                        DEFAULT_FILE_PATH,400);//                Bitmap qrccode = QRCodeEncoder.syncEncodeQRCode(ipStr + ":" + VideoServer.DEFAULT_SERVER_PORT,200);                showZxing.setImageBitmap(qrccode);            }        });  @Override    protected void onDestroy() {        mVideoServer.stop();        fileServer.stop();        super.onDestroy();    }    }

手机端 或者网页端直接
http://10.67.13.209:8080/ 类似这种可以看到列表 然后点击可以下载资源

http://10.67.13.209:8080/storage/emulated/0/mo.xlsx

类似这种可以直接下载资源到本地

这个 视频播放 网页端播放视频流

我们N多年前对终端的数据做处理,增删改的操作可以这样做

  @Deprecated    public Response serve(IHTTPSession session) {        try {            if (Method.POST.equals(session.getMethod())) {                String uri = session.getUri();                fields = session.getParms();                session.parseBody(fields);                String result = "";                switch (uri) {                    case "/SendQRPayAddress":                        receiveAddress();                        break;                    case "/SendPlu":                        receivePLU();                        break;                    case "/SendShopName":                        receiveShopConfig();                        break;                    case "/GetTransaction":                        result = sendTransaction();                        break;                    case "/GetTransactionDetail":                        result = sendTransactionDetail();                        break;                    case "/GetPurchaseOrder":                        result = sendPurchase();                        break;                    case "/DeleteAll":                        dtManager.delete();                        break;                    case "/DeleteBySerialNum":                        deleteTransactionBySerialNum();                        break;                    case "/DeleteByTradeTime":                        deleteTransactionByTime();                        break;                    case "/DeleteTransactionByTime":                        deleteTransaction();                        break;                    case "/SendSysTime":                        DateUtil.setSystemDate(fields.get("Time"));                        break;                    case "/RestartApp":                        restartApp();                        break;                    case "/SendUser":                        receiveCustomer();                        break;                    case "/SendWebAddress":                    case "/SendSettings":                        receiveSettingConfig();                        break;                    case "/GetVersionName":                        return new NanoHTTPD.Response("1," + App.VersionName + ";");                    case "/DeleteSysLogByType":                        deleteSysLogByType();                        break;                    case "/DeleteSysLogById":                        deleteSysLogById();                        break;                    case "/DeletePurchaseById":                        deletePurchaseByIds();                        break;                    case "/GetSysLog":                        result = sendSysLog();                        break;                    default:                        return new NanoHTTPD.Response("0,没有匹配的方法;");                }                return new NanoHTTPD.Response("1,OK;" + result);            } else {                return new NanoHTTPD.Response("0,no_post;");            }        } catch (Exception e) {            CrashReport.postCatchedException(e);            return new NanoHTTPD.Response("0," + "客户端错误:" + e.getMessage() + ";");        }    }

根据不同的url 做具体的也业务处理

这次有用到了,做个记录省的下次再查看,方便直接用到项目中

根据业务需要是一直开着,还是在适当的时候开启服务,自己看着处理

更多相关文章

  1. Android(安卓)平台基础开发简介
  2. [Android] 基于 Linux 命令行构建 Android(安卓)应用(一):关于 Andr
  3. 开发可统计单词个数的Android驱动程序(1)
  4. Android(安卓)4层框架
  5. Android中资源文件的Shape使用总结
  6. Android手机操作系统中的常用术语
  7. android屏幕监视工具 android screen monitor使用
  8. Android窗体悬浮在另一个窗体
  9. Android(安卓)JNI简单实例(android 调用C/C++代码)

随机推荐

  1. 转化屏幕•ViewFlipper 的使用
  2. android content命令
  3. 生成android的bks证书
  4. 启动Android模拟器报错需安装Intel HAXM
  5. 仿微信摇一摇功能,android 重力感应开发
  6. android wav 去头信息转化成pcm 格式数据
  7. android 优化文章
  8. [Android(安卓)界面] Android: 自定义DIA
  9. Android(安卓)SDK无法更新问题解决
  10. Android(安卓)编译环境搭建