Android: Как заставить все действия можно использовать сокетные соединения
Я должен был установить сокет в ActivityA в обычном режиме и готов к отправке данных, но теперь я хочу также иметь возможность использовать то же соединение сокетов для передачи данных в ActivityB. Я искал информацию в Интернете, кажется, можно использовать Синглтон. Я изучал несколько дней, я все еще не знаю, с чего начать, даже нашел несколько примеров упражнений, но все еще не знаю, как использовать мою оригинальную программу.
Я хочу сначала установить соединение между ActivityA и SERVER и передать значение SERVER, затем нажать кнопку, чтобы переключиться на ActivityB, а также передать значения в SERVER
Дайте мне какой-нибудь совет или обучающие сайты можно, чтобы я мог продолжать его изучать, большое спасибо
Установите методы сокета:
public class MainActivity extends Activity {
Button Btn_Wifi,Btn_Power,Btn_Flame;
Boolean connected=false;
Boolean powerstatus=false;
DataOutputStream dataOutputStream = null;
DataInputStream dataInputStream = null ;
Socket socket = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainView();
setListensers();
setButtonStatus();
}
private void mainView(){
Btn_Wifi = (Button) findViewById(R.id.Btn_Wifi);
Btn_Power = (Button) findViewById(R.id.Btn_Power);
Btn_Flame = (Button) findViewById(R.id.Btn_Flame);
}
private void setListensers(){
Btn_Wifi.setOnClickListener(BtnWifiOnClickListener);
Btn_Power.setOnClickListener(BtnPowerOnClickListener);
Btn_Flame.setOnClickListener(BtnFlameOnClickListener);
}
private void setButtonStatus(){
Btn_Power.setEnabled(false);
Btn_Flame.setEnabled(false);
}
Button.OnClickListener BtnWifiOnClickListener = new Button.OnClickListener(){
@Override
public void onClick(View view) {
if(!connected){
try {
socket = new Socket("IP", PORT);
dataOutputStream = new DataOutputStream(socket.getOutputStream());//and stream
changeConnectionStatus(true);//change the connection status
}catch (UnknownHostException e) {
changeConnectionStatus(false);
}catch (IOException e) {
changeConnectionStatus(false);
}
}else{
try {//try to close the socket
socket.close();
changeConnectionStatus(false);//change the connection status
} catch (UnknownHostException e) {//catch and
changeConnectionStatus(false);
} catch (IOException e) {//catch and
changeConnectionStatus(false);
}
}
}
};
Button.OnClickListener BtnPowerOnClickListener = new Button.OnClickListener(){
@Override
public void onClick(View view) {
if(!powerstatus){
try {
byte[] pon ={(byte) 0x10,(byte) 0x10};
dataOutputStream.write(pon);
dataOutputStream.flush();
PowerStatus(true);
}catch(Exception obj){
PowerStatus(false);
}
}else{
try {
byte[] poff ={(byte) 0x11,(byte) 0x11};
dataOutputStream.write(poff); //writeBytes(String str)
dataOutputStream.flush();
PowerStatus(false);
}catch(Exception obj){
PowerStatus(true);
}
PowerStatus(false);
}
}
};
Button.OnClickListener BtnFlameOnClickListener = new Button.OnClickListener(){
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setClass(MainActivity.this, FlameActivity.class);
startActivity(intent);
}
};
public void changeConnectionStatus(Boolean isConnected) {
connected=isConnected;//change variable
if(isConnected){//if connection established
Btn_Wifi.setText("CONNECTED");
Btn_Power.setEnabled(true);
}else{
Btn_Wifi.setText("NOT WIFI");
Btn_Power.setText("POWER OFF");
Btn_Power.setEnabled(false);
PowerStatus(false);
}
}
public void PowerStatus(Boolean isPowerOn) {
powerstatus=isPowerOn;//change variable
if(isPowerOn){//if connection established
Btn_Power.setText("POWER ON");
Btn_Flame.setText("SET FLAME");
Btn_Flame.setEnabled(true);
}else{
Btn_Power.setText("POWER OFF");
Btn_Flame.setText("CANT SET FLAME");
Btn_Flame.setEnabled(false);
}
}
}
1 ответ
Вы, конечно, можете использовать его, заявив,
то есть: в MainActivity, который создает сокетное соединение,static YourSocketClass objSocket // which creates connection
и использовать его в другой Деятельности, просто назвал его следующим образом:MainActivity.objSocket.yourMethod(any_param)
,
объявив статический, вы можете получить к нему доступ.
public static CommunicationClient objCommunicationClient;
public boolean setConnection(final String ipAddress, final Context context,
final boolean isFromSearch) {
class EstablishConnection extends AsyncTask<Void, Void, Boolean> { ProgressDialog objDialog; @Override protected void onPreExecute() { objDialog = new ProgressDialog(context); objDialog.setMessage(context.getResources().getString( R.string.strConnecting)); objDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); objDialog.show(); objDialog.setCancelable(false); objDialog.setCanceledOnTouchOutside(false); super.onPreExecute(); } @Override protected Boolean doInBackground(Void... params) { boolean isConnected = false; boolean isValid = false; StrictMode.setThreadPolicy(policy); objCommunicationClient = new CommunicationClient(ipAddress); isSocketInitiated = objCommunicationClient.initSocket(); WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiInfo info = wifiManager.getConnectionInfo(); CommonUtils.SSID = info.getSSID(); if (!isSocketInitiated) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText( getApplicationContext(), getResources().getString( R.string.strCantConnect), Toast.LENGTH_LONG).show(); } }); } else { isConnected = true; if (!isFromSearch) { CommonUtils.IP = ipAddress; try { objCommunicationClient.sendRequest(context, "<APP_SPECIFIC>"); } catch (Exception e) { e.printStackTrace(); } } else { isValid = isFromSearch; } if (isValid) { final Intent objIntentToGraph = new Intent(context, GraphDataActivity.class); objIntentToGraph .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); runOnUiThread(new Runnable() { @Override public void run() { startActivity(objIntentToGraph); overridePendingTransition( R.anim.slide_in_right, R.anim.slide_out_left); finish(); } }); } } return isConnected; } @Override protected void onPostExecute(Boolean result) { try { objDialog.cancel(); } catch (Exception err) { err.printStackTrace(); } super.onPostExecute(result); } } boolean status = false; try { status = new EstablishConnection().execute().get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } return status; }
} // и в моей другой деятельности я назвал это
MainActivity_HomePage.objCommunicationClient.sendRequest( context, CommonUtils.STOP_COMMAND); //send request is method which send message to server.