안녕하세요. 소켓 통신 중 서버에서 Download 메시지 수신시 다른 액티비티로 전환을 시키고 싶은데요.
현재 실행중인 액티비티는 MainActivity이고 아래 코드인 리시버가 쓰레드로 돌고 있습니다.
아래 "Download" 부분에 다른 액티비티로 전환하는 아래 코드가 삽입되어있었습니다.
Intent intent = new Intent(getApplicationContext(), SubActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
그러나, 저 코드를 넣고 실행을 하게되면
android content contextwrapper getapplicationcontext() 오류를 발생시키며 앱이 죽어버립니다.
여기저기 찾아보니 getApplicationContext() 를 this로, 혹인 MainActivity.this로 바꿔라라고 써있는데,
아무래도 this를 넣게되면 코드에 오류는 없으나, this가 리시버 자체를 가리켜서 마찬가지로 죽어버리고
MainActivity.this는 받아들이질 못하네요...ㅠㅠ
어떻게 전환해야될지 난감합니다. 조언 부탁드릴게요.
public class MainActivity extends Activity {
SocketService socket;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
socket = new SocketService();
socket.connect();
}
public class SocketService {
String ip;
int port;
Socket socket;
DataOutputStream writer;
DataInputStream reader;
FileOutputStream fileWriter;
FileInputStream fileReader;
Thread receiver;
//정책 하향 코드와, 생성자가 있습니다.
//서버 연결
public void connect() {
final String tag = "CONNECT";
try {
socket = new Socket(ip, port);
Log.d(tag, "서버 연결 성공");
receiver = new Thread(new Receiver());
receiver.start();
} catch (UnknownHostException e) {
Log.d(tag, e.getMessage());
} catch (IOException e) {
Log.d(tag, e.getMessage());
}
}
//서버 연결 해제
public void disconnect() {
final String tag = "DISCONNECT";
try {
socket.close();
Log.d(tag, "서버 연결 해제");
} catch (IOException e) {
Log.d(tag, e.getMessage());
}
}
// 리시버 쓰레드
class Receiver extends Activity implements Runnable {
final String tag = "RECEIVER";
String fileName;
@Override
public void run() {
while(!socket.isClosed()) {
if(socket.isClosed()) break;
try {
Log.d(tag, "Receiver Start");
reader = new DataInputStream(socket.getInputStream());
int len = reader.readInt();
byte[] buf = new byte[len];
reader.read(buf);
String receiveMessage = new String(buf);
Log.d(tag, receiveMessage);
String[] buffer = receiveMessage.split("\\@");
if(buffer[0].equals("Download")) {
fileName = buffer[1];
/*여기서 어떻게 해야할 지 모르겠습니다. */
}//end else if
} catch (IOException e) {
Log.d(tag, e.getMessage());
}//end try,catch
}//end while
}//end run
}//end class Receiver
}//end class