我有一个简单的网络服务器,它只提供存储中的音乐文件,以便通过网络使用。
目前,如果手机被锁定或进入睡眠状态,它会停止响应请求。在研究时我开始知道解决方案是在AsyncTask中推送服务。
但是当我经历这个SO post时,它提到AsyncTask基本上是用于一次性任务,用它完成。
这是否意味着我无法运行网络服务器,因为它将等待传入的请求?
我在手机中看到原生音乐播放器从未停止整夜,即使按下后退或屏幕被锁定。它一直在运行。那么有可能用服务器实现这一点吗?我们怎么能这样做?
到目前为止我的代码
public class MainActivity extends AppCompatActivity {
public Mp3Server server;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
server = new Mp3Server();
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();
}
public class Mp3Server extends NanoHTTPD {
public Mp3Server() {
super(8089);
}
@Override
public Response serve(String uri, Method method,
Map<String, String> header, Map<String, String> parameters,
Map<String, String> files) {
String answer = "";
Log.w("HTTPD", uri);
Log.w("HTTPD", parameters.toString());
Log.w("HTTPD", "Method is: "+method.toString());
Log.w("HTTPD", "Header is: "+header.toString());
FileInputStream fis = null;
try {
fis = new FileInputStream("/storage/C67A-18F7/"
+ "/Music/"+uri);
Log.w("HTTPD", uri + " found");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newChunkedResponse(Status.OK, "audio/mpeg", fis);
}
}
}