2024年安卓最新搭建Android上的服务器 “实现隔空取物”,面试怎么做自我介绍

最后

想要了解更多关于大厂面试的同学可以点赞支持一下,除此之外,我也分享一些优质资源,包括:Android学习PDF+架构视频+源码笔记高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 这几块的内容。非常适合近期有面试和想在技术道路上继续精进的朋友。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

} catch (IOException e) {

e.printStackTrace();

response.code(500).end();

}

}

});

server.listen(mAsyncServer, 54321);

}

@Override

protected void onDestroy() {

super.onDestroy();

if (server != null) {

server.stop();

}

if (mAsyncServer != null) {

mAsyncServer.stop();

}

}

private String getIndexContent() throws IOException {

BufferedInputStream bInputStream = null;

try {

bInputStream = new BufferedInputStream(getAssets().open(“index.html”));

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int len = 0;

byte[] tmp = new byte[10240];

while ((len = bInputStream.read(tmp)) > 0) {

baos.write(tmp, 0, len);

}

return new String(baos.toByteArray(), “utf-8”);

} catch (IOException e) {

e.printStackTrace();

throw e;

} finally {

if (bInputStream != null) {

try {

bInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

可以看到很简单,创建AsyncHttpServer对象,我们在onCreate中调用get,对外设置一个get型的url监听,监听的url是/即根目录。

然后调用listen,传入端口号54321,开启对该端口的监听。

onDestroy的时候停止服务器。

当捕获到对”/”的访问时,读取assets下的index.html返回给浏览器。

记得添加网络权限。

好了,运行demo,测试一下。

输入地址,你的手机的IP:端口号。

注意电脑和手机在同一个网段!

然后你应该看到如下效果图:

gekong05.png

如果没看到,那不用往下了,先找问题吧~

完善Demo

接下来,我们将手机上的mp4返回让其在浏览器上显示。

很简单,既然我们可以监听/,返回一个index.html,我们就能监听另一个url,返回文件目录。

server.get(“/files”, new HttpServerRequestCallback() {

@Override

public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {

JSONArray array = new JSONArray();

File dir = new File(Environment.getExternalStorageDirectory().getPath());

String[] fileNames = dir.list();

if (fileNames != null) {

for (String fileName : fileNames) {

File file = new File(dir, fileName);

if (file.exists() && file.isFile() && file.getName().endsWith(“.mp4”)) {

try {

JSONObject jsonObject = new JSONObject();

jsonObject.put(“name”, fileName);

jsonObject.put(“path”, file.getAbsolutePath());

array.put(jsonObject);

} catch (JSONException e) {

e.printStackTrace();

}

}

}

}

response.send(array.toString());

}

});

我们监听/files这个Url,然后返回Sdcard根目录的视频文件,拼接成JSON返回。

这里如果你重新启动,在浏览器上输入:

http://192.168.1.100:54321/files

会看到一堆JSON数据:

gekong06.png

但是我们需要在刚才的html上显示,所以这个请求应该是刚才的Html页面发起:

文档的标题

    可能很多朋友没了解过js,不过应该能看明白,$.getJSON获取返回的JSON数组,然后遍历为每个Json对象生成一个li标签,添加到页面上。

    这里用了jquery,对于js的也需要也请求处理,这里省略了,很简单,看源码即可。

    此时访问,已经可以显示出视频目录了:

    gekong07.png

    接下来就是点击播放了,在html里面有个标签叫video用于播放视频的,他有个src属性用于设置播放的视频路径。

    所以我们要做的仅为:

    • 点击名字,拿到该视频对应的url,然后设置给video的src属性即可。

    那么视频的url是什么?

    刚才我们返回了视频的路径,所以我们只要再监听一个url,将根据传入的视频路径,将视频文件流返回即可。

    server.get(“/files/.*”, new HttpServerRequestCallback() {

    @Override

    public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {

    String path = request.getPath().replace(“/files/”, “”);

    try {

    path = URLDecoder.decode(path, “utf-8”);

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    File file = new File(path);

    if (file.exists() && file.isFile()) {

    try {

    FileInputStream fis = new FileInputStream(file);

    response.sendStream(fis, fis.available());

    } catch (Exception e) {

    e.printStackTrace();

    }

    return;

    }

    response.code(404).send(“Not found!”);

    }

    });

    我们又监听了一个url为files/xxx.*,捕获到之后,拿到文件名,去SDCard找到该文件,返回文件流即可。

    html端的代码为:

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值