我使用NanoHTTPD寫了一個小的Android服務器。它可以很好地服務一個HTML文件(位於sdcard/www/index.html的網頁)。任何人都可以幫助我找出如何使用NanoHTTPD提供音頻或視頻文件而不是HTML頁面?如果這個問題看起來很愚蠢,請原諒我,因爲我是HTTP的新手!這裏是我的服務器端代碼(我把它換成網頁路徑,音頻文件):如何使用服務上NanoHTTPD SD卡文件(裏面的Android)
package com.example.zserver;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
public class MainActivity extends Activity {
private WebServer server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new WebServer();
try {
server.start();
} catch(IOException ioe) {
Log.w("Httpd", "The server could not start.");
}
Log.w("Httpd", "Web server initialized.");
}
@Override
public void onDestroy()
{
super.onDestroy();
if (server != null)
server.stop();
}
private class WebServer extends NanoHTTPD {
public WebServer()
{
super(8080);
}
@Override
public Response serve(String uri, Method method,
Map<String, String> header,
Map<String, String> parameters,
Map<String, String> files) {
String answer = "";
try {
// Opening file from SD Card
File root = Environment.getExternalStorageDirectory();
FileReader index = new FileReader(root.getAbsolutePath() +
"/www/music.mp3");
BufferedReader reader = new BufferedReader(index);
String line = "";
while ((line = reader.readLine()) != null) {
answer += line;
}
} catch(IOException ioe) {
Log.w("Httpd", ioe.toString());
}
return new NanoHTTPD.Response(answer);
}
}
}
我已經包括在我的代碼需要使用的權限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
任何幫助將不勝感激。提前致謝!
編輯,添加權限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
EDIT1:讀數的規範方式和寫入緩衝區:
int read;
int n=1;
while((read = dis.read(mybytearray)) != -1){
dos.write(mybytearray, 0, read);}
非常感謝!它適用於較小的媒體。我想知道如何包含規範的讀/寫方式(使用緩衝區),以便可以傳輸更大的文件。在自定義協議中,它很簡單。我只是從一個緩衝區讀取(由數據輸入流填充),同時將其寫入數據輸出流。我不確定在HTTP中如何實現。我不能在每個數據塊中不添加標題的情況下連續發送數據。或者我錯過了一些東西。你能提供一個示例代碼嗎?詳情請參閱我的編輯部分。再次感謝。 –
狀態。OK不允許mp3在html5播放器中查找,請告訴我用戶需要什麼標題才能讓它在播放器中搜索 – yourkishore
我使用此代碼將我的手機中的mp3流式傳輸到瀏覽器。我收到錯誤'403 Forbidden(/)'。如何解決這個問題? –