搭建Android上的服务器 “实现隔空取物”(1)

  • 如何通过浏览器输入一个地址播放手机上的视频

当时也很多人回答,回答的核心都是正确的。

当然我恰好看到这个库,之前也没推送过相关内容,所以我决定写个简易的Demo.

当然是Demo就没有什么美观可言了,仅为快速实现效果。

效果图是这样的:

gekong04.gif

页面上显示手机上的视频列表,然后点击某个视频,即开始播放该视频。

有了上例参考,非常简单。

注:部分代码直接从上例copy。

该案例需要网络和Sdcard权限!

先把服务器搭起来


依赖库

首先,依赖下我们搭建Server需要用到的库:

compile ‘com.koushikdutta.async:androidasync:2.+’

编写简易html

然后我们在assets下编写一个html文件用于浏览器访问,index.html

最简单的即可:

嘿嘿嘿,连通了…

启动服务,监听端口

public class MainActivity extends AppCompatActivity {

private AsyncHttpServer server = new AsyncHttpServer();

private AsyncServer mAsyncServer = new AsyncServer();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

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

@Override

public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {

try {

response.send(getIndexContent());

} 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页面发起:

文档的标题
    **自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

    深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

    因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

    img

    img

    img

    img

    既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

    由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

    如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

    总结

    作为一名从事Android的开发者,很多人最近都在和我吐槽Android是不是快要凉了?而在我看来这正是市场成熟的表现,所有的市场都是温水煮青蛙,永远会淘汰掉不愿意学习改变,安于现状的那批人,希望所有的人能在大浪淘沙中留下来,因为对于市场的逐渐成熟,平凡并不是我们唯一的答案!

    资料.png
    资料图.jpg

    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!

    学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

    如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

    总结

    作为一名从事Android的开发者,很多人最近都在和我吐槽Android是不是快要凉了?而在我看来这正是市场成熟的表现,所有的市场都是温水煮青蛙,永远会淘汰掉不愿意学习改变,安于现状的那批人,希望所有的人能在大浪淘沙中留下来,因为对于市场的逐渐成熟,平凡并不是我们唯一的答案!

    [外链图片转存中…(img-Wrl8uRy8-1711990975804)]
    [外链图片转存中…(img-fIXLFKVA-1711990975805)]

    《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!
    • 5
      点赞
    • 7
      收藏
      觉得还不错? 一键收藏
    • 1
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论 1
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值