即使电话被锁定和睡觉,也不要停止应用程序

时间:2018-03-03 15:32:37

标签: java android

我有一个简单的网络服务器,它只提供存储中的音乐文件,以便通过网络使用。

目前,如果手机被锁定或进入睡眠状态,它会停止响应请求。在研究时我开始知道解决方案是在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);
        }
    }
}

0 个答案:

没有答案