apache 如何在Android应用程序中添加HTTP服务器并从移动的浏览器访问

bxgwgixi  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(235)

我想在Android应用程序中添加一个http服务器。我已经尝试过https://github.com/NanoHttpd/nanohttpd中的NanoHTTPD服务器。因此,我可以在桌面上以简单的java类运行此http服务器。并且可以从桌面浏览器访问它。
现在我想添加此代码与Android应用程序,并启动此服务器内的Android设备,并从我的移动的设备浏览器访问它。这是可能的,有任何其他服务器,我可以与我的Android应用程序绑定。

cnh2zyt3

cnh2zyt31#

这是我的工作示例代码。它有限制,因为活动将从内存中删除,我的服务器将停止。为了删除,我将为此任务编写一个服务。

public class MainActivity extends Activity {
     private static final int PORT = 8080;

      private MyHTTPD server;

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       }

      @Override
      protected void onResume() {
        super.onResume();
            server = new MyHTTPD();
        try {
            server.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      }

      @Override
      protected void onPause() {
        super.onPause();

      }
      @Override
      protected void onDestroy() {
        super.onDestroy();
        if (server != null)
          server.stop();
      }

      private class MyHTTPD extends NanoHTTPD {
          public MyHTTPD() {
                super(8080);
            }

            @Override public Response serve(IHTTPSession session) {
                Method method = session.getMethod();
                String uri = session.getUri();
                System.out.println(method + " '" + uri + "' ");

                String msg = "<html><body><h1>Hello server</h1>\n";
                Map<String, String> parms = session.getParms();
                if (parms.get("username") == null)
                    msg +=
                            "<form action='?' method='get'>\n" +
                                    "  <p>Your name: <input type='text' name='username'></p>\n" +
                                    "</form>\n";
                else
                    msg += "<p>Hello, " + parms.get("username") + "!</p>";

                msg += "</body></html>\n";

                return new NanoHTTPD.Response(msg);
            }
      }

}

//now access web page using http://127.0.0.1:8080
iecba09b

iecba09b2#

以下代码有效:

private class MyHTTPD extends NanoHTTPD {
    public MyHTTPD() throws IOException {
        super(8080);
    }

    @Override
    public Response serve(String uri, String method, Properties header, Properties parms, Properties files) {
        InputStream is = new FileInputStream("/sdcard/1.mp3");
        return new NanoHTTPD.Response(HTTP_OK, "audio/mp3", is);
    }
}

server = new MyHTTPD();
server.start();
// and now you can use http://localhost:8080 to do something (ex : streaming audio ...)

相关问题