socketservice.java
package com.example.test;
import java.io.DataInputStream;
public class Socketservice extends Service {
public String SERVERIP = "Ip주소";
public int SERVERPORT = 3333;
DataOutputStream out;
DataInputStream in;
int data;
Socket socket;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
System.out.println("I am in Ibinder onBind method");
return myBinder;
}
private final IBinder myBinder = new LocalBinder();
// TCPClient mTcpClient = new TCPClient();
public class LocalBinder extends Binder {
public Socketservice getService() {
return Socketservice.this;
}
}
@Override
public void onCreate() {
super.onCreate();
System.out.println("I am in on create");
}
public void IsBoundable() {
Toast.makeText(this, "I bind like butter", Toast.LENGTH_LONG).show();
}
public void sendData(int data) throws IOException {
if (out != null) {
out.writeInt(data);
}
}
public void sendData(int data,int x,int y) throws IOException {
if (out != null) {
out.writeInt(data);
out.writeInt(x);
out.writeInt(y);
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
System.out.println("I am in on start");
Toast.makeText(this, "Service created ...", Toast.LENGTH_LONG).show();
Runnable connect = new connectSocket();
new Thread(connect).start();
return START_REDELIVER_INTENT;
}
class connectSocket implements Runnable {
@Override
public void run() {
try {
// here you must put your computer's IP address.
Log.e("TCP Client", "C: Connecting...");
// create a socket to make the connection with the server
socket = new Socket(SERVERIP, SERVERPORT);
try {
// send the message to the server
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
Log.e("TCP Client", "C: Sent.");
Log.e("TCP Client", "C: Done.");
while (true) {
data = in.read();
}
} catch (Exception e) {
Log.e("TCP", "S: Error", e);
}
} catch (Exception e) {
Log.e("TCP", "C: Error", e);
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
try {
socket.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
socket = null;
}
}
Keyboard.java
public class Keyboard extends Activity {
public static final String LOG = "Log";
DataInputStream socket_in;
DataOutputStream socket_out;
Socket socket;
int data;
Socketservice myservice = new Socketservice();
private boolean myBound = false; // 서비스 연결 여부
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Intent intent = new Intent(this, Socketservice.class);
startService(intent);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (myBound) {
unbindService(conn);
myBound = false;
}
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder) service;
myservice = binder.getService();
myBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
myBound = false;
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
@SuppressWarnings("unused")
MenuItem item1 = menu.add(0, 1, 0, "선택화면");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
stopService(new Intent(Keyboard.this, Socketservice.class));
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.keyboard);
실행할 버튼 객체들...
}
Mouse.java
public class Mouse extends Activity implements
android.view.GestureDetector.OnGestureListener, OnDoubleTapListener {
public static final String LOG = "Log";
Button Button_Touch_Left;
Button Button_Touch_Right;
DataInputStream socket_in;
DataOutputStream socket_out;
Socket socket;
int data;
GestureDetector GestureDetector;
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
@SuppressWarnings("unused")
MenuItem item1 = menu.add(0, 1, 0, "선택화면");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Socketservice myservice = new Socketservice();
private boolean myBound = false; // 서비스 연결 여부
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Intent intent = new Intent(this, Socketservice.class);
startService(intent);
bindService(intent, conn, Context.BIND_AUTO_CREATE);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (myBound) {
unbindService(conn);
myBound = false;
}
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder) service;
myservice = binder.getService();
myBound = true;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
myBound = false;
}
};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mouse);
마우스 버튼 객체들 .....
}
이렇게 있는데 선택화면은 액티비티 키보드와 마우스를 선택할 인텐트로만 되어있습니다.
근데 여기서 제가 질문할 요지는
처음에 키보드와 마우스를 둘중에 하나를 선택해서
서버 pc를 원격제어하는것으로 소켓통신으로 하는건데
예를 들면 처음에 마우스를 먼저 소켓을 연결해서 서비스를 사용하면
이용이 가능합니다. 하지만 선택화면으로 액티비티가 이동되고
키보드를 가면 아무것도 데이터가 전송이 되질 않습니다.
키보드를 사용했다가 마우스도 사용하려고 하고싶어서 소켓서비스를
따로 해서 했는데도 되질 않아서 일주일내내 답답하게 있습니다
답변 부탁드립니다.