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