Java 保持一个套接字打开,以便在android编程的几个活动中使用它

Java 保持一个套接字打开,以便在android编程的几个活动中使用它,java,android,sockets,remote-control,Java,Android,Sockets,Remote Control,我想建立一个PC遥控器,所以我首先需要连接到服务器(这是一个java程序),然后打开一个控制PC鼠标的页面。我想在几个活动中打开套接字连接,在它们之间切换。当我想在另一个活动中使用打开的套接字(用于发送有关鼠标坐标的信息以控制电脑的鼠标)时,它不起作用 我也试图在第二页建立一个新的连接,但没有成功 在我的主要活动中,我编写了以下代码: public class MainActivity extends AppCompatActivity { Context context; EditText

我想建立一个PC遥控器,所以我首先需要连接到服务器(这是一个java程序),然后打开一个控制PC鼠标的页面。我想在几个活动中打开套接字连接,在它们之间切换。当我想在另一个活动中使用打开的套接字(用于发送有关鼠标坐标的信息以控制电脑的鼠标)时,它不起作用

我也试图在第二页建立一个新的连接,但没有成功

在我的主要活动中,我编写了以下代码:

public class MainActivity extends AppCompatActivity {

Context context;
EditText IPText;
Button BLock;

private boolean isConnected=false;
private Socket socket;
private PrintWriter out;
String ipaddress;

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

    context = this; //save the context to show Toast messages

    IPText = (EditText) findViewById(R.id.ipText);
    ipaddress = IPText.getText().toString();
    BLock = (Button)findViewById(R.id.lockB);
    BLock.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ConnectPhoneTask connectPhoneTask = new ConnectPhoneTask();
            connectPhoneTask.execute(IPText.getText().toString()); //try to connect to server in another thread
        }
    });

}
@Override
public void onDestroy()
{
    super.onDestroy();
    if(isConnected && out!=null) {
        try {
            out.println("exit"); //tell server to exit
            socket.close(); //close socket
        } catch (IOException e) {
            Log.e("remotedroid", "Error in closing socket", e);
        }
    }
}
public class ConnectPhoneTask extends AsyncTask<String,Void,Boolean> {

    @Override
    protected Boolean doInBackground(String... params) {
        boolean result = true;
        try {
            InetAddress serverAddr = InetAddress.getByName(params[0]);
            socket = new Socket(serverAddr, Integer.parseInt(Constants.SERVER_PORT));//Open socket on server IP and port
        } catch (IOException e) {
            Log.e("remotedroid", "Error while connecting", e);
            result = false;
        }
        return result;
    }

    @Override
    protected void onPostExecute(Boolean result)
    {
        isConnected = result;
        Toast.makeText(context,isConnected?"Connected to server!":"Error while connecting",Toast.LENGTH_LONG).show();
        try {
            if(isConnected) {
                out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
                        .getOutputStream())), true); //create output stream to send data to server

                Intent i = new Intent(MainActivity.this,mouseActivity.class);
                startActivity(i);
            }
        }catch (IOException e){
            Log.e("remotedroid", "Error while creating OutWriter", e);
            Toast.makeText(context,"Error while connecting",Toast.LENGTH_LONG).show();
        }
    }
}
public class mouseActivity extends AppCompatActivity {

private boolean isConnected=false;
TextView mousePad;
private boolean mouseMoved=false;
private  PrintWriter out;

private float initX =0;
private float initY =0;
private float disX =0;
private float disY =0;

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

    mousePad = (TextView)findViewById(R.id.mousePad);

    //capture finger taps and movement on the textview
    mousePad.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(isConnected && out!=null){
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        //save X and Y positions when user touches the TextView
                        initX =event.getX();
                        initY =event.getY();
                        mouseMoved=false;
                        break;
                    case MotionEvent.ACTION_MOVE:
                        disX = event.getX()- initX; //Mouse movement in x direction
                        disY = event.getY()- initY; //Mouse movement in y direction
                        /*set init to new position so that continuous mouse movement
                        is captured*/
                        initX = event.getX();
                        initY = event.getY();
                        if(disX !=0|| disY !=0){
                            out.println(disX +","+ disY); //send mouse movement to server
                        }
                        mouseMoved=true;
                        break;
                    case MotionEvent.ACTION_UP:
                        //consider a tap only if usr did not move mouse after ACTION_DOWN
                        if(!mouseMoved){
                            out.println(Constants.MOUSE_LEFT_CLICK);
                        }
                }
            }
            return true;
        }
    });
}
}

我对MouseActivity中的“isConnected”和“out”参数有问题


您知道如何修复它吗???

您尝试过使用事件吗?@不可能。