Я написал небольшой сервер Android с помощью NanoHTTPD. Он может хорошо служить HTML-файлу (веб-страница, расположенная по адресу sdcard/www/index.html). Может ли кто-нибудь помочь мне узнать, как я могу использовать аудио- или видеофайлы вместо html-страницы с помощью NanoHTTPD? Простите меня, если вопрос кажется глупым, поскольку я новичок в HTTP! Вот мой код на стороне сервера (я заменил путь к веб-страницы, что аудиофайла):Как подать файл на SD-карте с помощью NanoHTTPD (внутри 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"/>
Любая помощь будет оценена. Заранее спасибо!
EDIT, Added разрешение:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
EDIT1: Canonical способ чтения и записи в буфер:
int read;
int n=1;
while((read = dis.read(mybytearray)) != -1){
dos.write(mybytearray, 0, read);}
Большое спасибо! Он отлично работает для небольших носителей. Мне было интересно, как включить канонический способ чтения/записи (используя буферы), чтобы можно было передавать большие файлы. В пользовательском протоколе это прямолинейно. Я просто читаю из буфера (заполняется потоком ввода данных) и одновременно записываю его в поток вывода данных. Я не уверен, как это можно добиться в HTTP. Я не могу непрерывно отправлять данные без добавления заголовков в каждый фрагмент данных .. или, может быть, я что-то упустил. Можете ли вы предоставить пример кода? Подробнее см. В разделе редактирования. Еще раз спасибо. –
Состояние.OK не позволяет MP3 искать в html5-плеере, скажите, пожалуйста, какие заголовки мне нужны для пользователя, чтобы он искал его в проигрывателе. – yourkishore
Я использовал этот код для передачи mp3 с моего телефона в мой браузер. Я получаю ошибку '403 Forbidden (/)'. Как это исправить? –