Можно ли обслуживать http-сервер из указанной папки c в android? - PullRequest
0 голосов
/ 01 апреля 2020

Я реализую android веб-сервер с использованием Socket и SocketServer в студии android. Все работает нормально. Но я хочу изменить каталог на указанную c папку и затем обслуживать оттуда.

MainActivity. java

Я использовал SocketServer и Socket для реализации этого .

import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
import java.util.concurrent.Executors;

public class MainActivity extends AppCompatActivity {

    Button startBtn, stopBtn;
    ServerSocket server;
    Socket socket;
    Executors executors = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startBtn = findViewById(R.id.start_btn);
        stopBtn = findViewById(R.id.stop_btn);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
            startBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    PackageManager m = getPackageManager();
                    String s = getPackageName();
                    PackageInfo p = null;
                    try {
                        p = m.getPackageInfo(s, 0);
                    } catch (PackageManager.NameNotFoundException e) {
                        e.printStackTrace();
                    }
                    s = p.applicationInfo.dataDir;

                    Toast.makeText(getApplicationContext(),s,Toast. LENGTH_LONG).show();

                    Log.e("Directory::",s);

                    try {
                        server  = new ServerSocket(8080);
                        Log.i("Listening on port::", String.valueOf(8080));

                        executors.newSingleThreadExecutor().submit(new Runnable() {
                            @Override
                            public void run() {
                                while (true) {
                                    try (Socket socket = server.accept()) {
                                        Date today = new Date();
                                        String httpResponse = "HTTP/1.1 200 OK\r\n\r\n" + today;
                                        socket.getOutputStream().write(httpResponse.getBytes("UTF-8"));
                                    } catch (IOException e) {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        });
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
        stopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e("Stopped::","Server");
                finish();
                android.os.Process.killProcess(android.os.Process.myPid());

            }
        });
    }
}

Activity_main. xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="START"
        android:id="@+id/start_btn"
         />

    <Button
        android:id="@+id/stop_btn"
        android:layout_below="@+id/start_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="STOP &amp; EXIT"
         />

</RelativeLayout>

Возможно ли обслуживание из указанной папки c? eg- Загрузки в android

...