Я реализую 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 & EXIT"
/>
</RelativeLayout>
Возможно ли обслуживание из указанной папки c? eg- Загрузки в android