`
起跑线
  • 浏览: 28044 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

android本地webServer使用(NanoHTTPD)

 
阅读更多

因为在开发android的html5应用的时候碰到了ajax跨域访问的问题,所有想到了在android本地开个webServer解决此问题,开源NanoHttpD帮我解决了这个问题,下面上连接

https://github.com/NanoHttpd/nanohttpd

主要代码部分

写道
package com.bluesky.cwan5games;

import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Map.Entry;

import android.content.res.AssetManager;
import android.util.Log;
import fi.iki.elonen.NanoHTTPD;
import fi.iki.elonen.NanoHTTPD.Response.Status;

public class SimpleServer extends NanoHTTPD {
public AssetManager asset_mgr;

private static String TAG = SimpleServer.class.toString();

public SimpleServer() {
// 端口是8088,也就是说要通过http://127.0.0.1:8088来访当问
super(8088);
}

public Response serve(String uri, Method method, Map<String, String> header, Map<String, String> parameters,
Map<String, String> files) {
Log.d(TAG, "SERVE :: URI " + uri);
final StringBuilder buf = new StringBuilder();
for (Entry<String, String> kv : header.entrySet())
buf.append(kv.getKey() + " : " + kv.getValue() + "\n");
InputStream mbuffer = null;
String file_name = uri.substring(1);
// 默认的页面名称设定为index.html
if (file_name.equalsIgnoreCase("")) {
file_name = "games/index.html";
} else {
file_name = "games/" + file_name;
}

try {
if (uri != null) {
if (file_name.contains(".js")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "application/javascript", mbuffer,
(long) mbuffer.available());
} else if (file_name.contains(".css")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "text/css", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".png")) {
mbuffer = asset_mgr.open(file_name);
// HTTP_OK = "200 OK" or HTTP_OK = Status.OK;(check comments)
return new NanoHTTPD.Response(Status.OK, "image/png", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".jpg") || file_name.contains(".jpeg")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "image/jpeg", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".ogv")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "video/ogg", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".ogg")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "application/x-ogg", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".txt")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "text/plain", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".xml")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "text/xml", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".json")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "text/json", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".mp3")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "audio/mpeg", mbuffer, (long) mbuffer.available());
} else if (file_name.contains(".mp4")) {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, "video/mp4", mbuffer, (long) mbuffer.available());
} else if (uri.contains("/mnt/sdcard")) {
// Log.d(TAG,"request for media on sdCard "+uri);
// File request = new File(file_name);
// mbuffer = new FileInputStream(request);
// FileNameMap fileNameMap = URLConnection.getFileNameMap();
// String mimeType = fileNameMap.getContentTypeFor(file_name);
//
// Response streamResponse = new Response(Status.OK, mimeType, mbuffer,
// (long)mbuffer.available());
// Random rnd = new Random();
// String etag = Integer.toHexString( rnd.nextInt() );
// streamResponse.addHeader( "ETag", etag);
// streamResponse.addHeader( "Connection", "Keep-alive");
// return streamResponse;
} else {
mbuffer = asset_mgr.open(file_name);
return new NanoHTTPD.Response(Status.OK, MIME_HTML, mbuffer, (long) mbuffer.available());
}
}
} catch (IOException e) {
Log.d(TAG, "Error opening file " + file_name +" "+ e.getMessage());
}
return null;
}
}

 这个项目还用了腾讯浏览器服务SDK,这个sdk比原生android的webview效率高,使用方便

https://x5.tencent.com/tbs/index.html

分享到:
评论

相关推荐

    android studio使用NanoHTTPD 创建 http 服务器打开html并使用webView打开页面

    在Android开发中,有时我们需要在应用内部展示网页内容或者实现简单的本地服务器功能,这就涉及到`Android Studio`、`NanoHTTPD`以及`WebView`的综合使用。本篇将详细讲解如何利用`Android Studio`集成`NanoHTTPD`来...

    android下面的webserver的实现

    以下是对“android下面的webserver的实现”这一主题的详细解释。 一、Android Web服务器的基本原理 Android Web服务器的核心是将Android设备转变为一个HTTP服务器,能够接收并响应HTTP请求。这通常涉及到以下几个...

    NanoHttp android 服务器

    总的来说,NanoHttpd为Android开发者提供了一种快速搭建本地服务器的方法,这对于开发过程中进行数据交互、测试和调试非常有帮助。通过理解并实践NanoHttpd的使用,你可以提升在Android平台上构建网络服务的能力。

    JKAndroidWebserver:这是一个示例项目,该项目使用NanoHTTPd在Android上运行Web服务器

    总的来说,JKAndroidWebserver项目展示了Android设备作为Web服务器的潜力,通过NanoHTTPD的使用,开发者可以轻松地在Android应用中集成HTTP服务,从而拓宽应用的边界。然而,需要注意的是,由于Android系统的安全...

    SpringMVC精品资源-- Web server and web framework of Android pl.zip

    "SpringMVC精品资源-- Web server and web framework of Android pl.zip" 这个压缩包文件很可能包含了与在 Android 上使用 SpringMVC 相关的教程、代码示例或者工具集。 1. **SpringMVC 概述**: SpringMVC 是 ...

    NanoHTTPD demo

    这个"NanoHTTPD demo"项目可以帮助开发者更好地理解如何在Android环境中集成和使用Web服务器,为本地应用程序提供额外的网络功能。同时,这个小型服务器可以作为学习HTTP协议和服务器开发的一个实践平台。

    aws.zip_HTTPServer_android_android httpserver_aws android_文件传输

    标题中的“aws.zip_HTTPServer_android_android httpserver_aws android_文件传输”暗示了这是一个关于在Android平台上使用AWS服务实现HTTP服务器功能,以便进行文件传输的项目。在这个项目中,开发者可能利用AWS ...

    HttpServerTest

    在HttpServerTest项目中,我们可以使用NanoHTTPD来接收客户端的请求,并根据请求类型返回图片、音乐或视频资源。 接下来,让我们关注资源分享部分。在Android设备上,通过HTTP服务器共享本地存储的媒体资源,需要对...

    android网络相关代码

    以上就是从标题和描述中提取的Android网络相关知识点,涵盖了图片和网页展示、文件下载、本地WebServer、网络请求库的使用以及数据解析等多个方面。这些知识对于Android开发者来说是必备的技能,能够构建出功能完善...

    android php

    6. **应用接口**:Android应用可以使用HttpURLConnection或第三方库如OkHttp来与本地Web服务器通信,发送HTTP请求并接收响应。 7. **调试和测试**:在开发过程中,你需要在模拟器或真实设备上测试整个工作流程,...

    android设备上构建httpserver

    1. **选择合适的HTTP服务器库**:Android平台上有一些现成的库可以帮助我们快速实现HTTP服务器功能,如NanoHTTPD、MicroHTTPD或者使用Java内置的HTTPServer。这些库简化了处理HTTP请求和响应的复杂性。 2. **创建...

    VideoServer_android_视频_视频服务器_

    本项目聚焦于“VideoServer_android_视频_视频服务器”,它利用NanoHttpd库实现在Android设备上搭建一个简易的视频服务器,使得个人电脑(PC)可以远程访问并播放手机上的视频资源。下面将详细介绍这个项目及其相关...

    MyAndServer_AndServerjar_服务器APP_AndServer_Server_shezep_

    【基于AndServer框架的安卓服务器APP】是指使用AndServer作为核心组件开发的应用程序,这样的APP能够在Android设备上运行,提供类似于传统Web服务器的功能。在本案例中,该APP具备了基础的用户管理和服务功能。 ...

    简单的AndroidServerDemo

    NanoHTTPD是一个小型、简单且可扩展的HTTP服务器,它允许开发者快速搭建一个简单的Web服务器,处理GET和POST请求。在这个项目中,服务器端可能包含以下功能: 1. 注册接口:客户端发送用户注册信息(如用户名和密码...

Global site tag (gtag.js) - Google Analytics