2013-07-16 4 views
3

Я попытался заставить nanohttpd работать под андроид. Я использовал этот пример:nanohttpd in android wont work

package com.example.android_test; 

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

import com.example.android_test.NanoHTTPD.Response.Status; 

import android.app.Activity; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    private static final int PORT = 8765; 
    private TextView hello; 
    private MyHTTPD server; 
    private Handler handler = new Handler(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    hello = (TextView) findViewById(R.id.hello); 
    } 

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

    TextView textIpaddr = (TextView) findViewById(R.id.ipaddr); 
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); 
    int ipAddress = wifiManager.getConnectionInfo().getIpAddress(); 
    final String formatedIpAddress = String.format("%d.%d.%d.%d", (ipAddress & 0xff), 
     (ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff)); 
    textIpaddr.setText("Please access! http://" + formatedIpAddress + ":" + PORT); 

    try { 
     server = new MyHTTPD(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 

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

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

    @Override 
    public Response serve(String uri, Method method, Map<String, String> headers, 
     Map<String, String> parms, Map<String, String> files) { 
     final StringBuilder buf = new StringBuilder(); 
     for (Entry<String, String> kv : headers.entrySet()) 
     buf.append(kv.getKey() + " : " + kv.getValue() + "\n"); 
     handler.post(new Runnable() { 
     @Override 
     public void run() { 
      hello.setText(buf); 
     } 
     }); 

     final String html = "<html><head><head><body><h1>Hello, World</h1></body></html>"; 
     return new NanoHTTPD.Response(Status.OK, MIME_HTML, html); 
    } 
    } 
} 

Когда я запускаю приложение на своем телефоне, активность показывает правильный IP-адрес. Я также могу проверить указанный адрес. Но когда я пытаюсь получить доступ к этому через браузер, сайт не загружается. Кроме того, показанный выше MainActivity.java я только добавил файл NanoHTTPD.java из проекта nanohttpd. Есть идеи?

ответ

6

Две вещи приходят на ум, оба связаны с разрешениями. Посмотрите на андроид манифеста, вы хотите, два разрешения для вашего приложения

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

ИНТЕРНЕТА, потому что вы обращаетесь сетевыми службами и WRITE_EXTERNAL_STORAGE, потому что, когда NanoHttpd получает входящее соединение он записывает временные файлы и наиболее/все телефоны отображают «java.io.tmpdir», чтобы указать на SD-карту.

Посмотрите, если это поможет.

+0

см. Следующие https://stackoverflow.com/questions/36052956/live-camera-streaming-with-nanohttpd-in-android –

 Смежные вопросы

  • Нет связанных вопросов^_^