рдЙрджреНрджреЗрд╢реНрдп:рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ "рд╕реЙрдХреЗрдЯреНрд╕" рдкрд░ рдмрдирд╛рдПрдВ, рддрд╛рдХрд┐ рдЬрдм рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдВрдж рд╣реЛ рдЬрд╛рдП, рддреЛ рдХрд╛рдо рдЬрд╛рд░реА рд░рд╣реЗ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдЦреЛ рди рдЬрд╛рдПред
рд╕рдорд╛рдзрд╛рди:рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдорджрдж рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдПрдХ рд╕реЗрд╡рд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЗрдЦ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реВрдВрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди 3 рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
- MainActivity - рдЧрддрд┐рд╡рд┐рдзрд┐ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХрд╛рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рджреЗрдЦреЗрдВрдЧреЗ
- ServiceExchange - рд╕реНрд╡рдпрдВ рд╕реЗрд╡рд╛
- рд╕реЙрдХреЗрдЯрд╕реЗрди - рд╣рдорд╛рд░реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ
MainActivity:@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.startService(new Intent(this, ServiceExchange.class));
рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╢реНрд░реЛрддрд╛ "рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрдЗрд╡рд░" рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рд╕реЗ
рдСрдирдбреЗрдЯрд╛рдлреНрд░реЙрдо рд╕рд░реНрд╡рд┐рд╕ рд╕реЗрд╡рд╛ рдкрд░ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдЧрд╛ред
ServiceExchange.BROADCAST_ACTION рдХреЛ рд╣рдорд╛рд░реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЯреИрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЦреЛ рдЬрд╛рдПрдВрдЧреЗред
ServiceExchange: public class ServiceExchange extends Service { private Intent intent; public static final String BROADCAST_ACTION = "com.rheit.base.event";
рд╕реЗрд╡рд╛
рд╕реЙрдХреЗрдЯрд╕реЗрдиреНрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ, рдФрд░
рд╕реЙрдХреЗрдЯрдПрд╕реНрдХреНрдпреВ рд╕реЗ рдмреНрд░реЙрдбрдХрд╛рд╕реНрдЯрд░реАрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдореЗрдирдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░
рдХрд░рддреА рд╣реИред
SocketAsync: class SocketAsync extends AsyncTask<Void, Integer, Void> { public Socket socket; public String message; public Handler threadHandler; public Context parent; public SocketAsync(Handler threadHandler) { this.threadHandler = threadHandler; } @Override protected Void doInBackground(Void... params) { try { if (config.SOCKET_CONNECTED == false) { InetAddress serverAddr = InetAddress .getByName(config.SERVER_ADDR); socket = new Socket(serverAddr, config.SERVER_PORT); config.SOCKET_CONNECTED = true; Intent intent = new Intent(ServiceExchange.BROADCAST_ACTION); intent.putExtra("SERVER_STATUS", true); Message threadMessage = new Message(); threadMessage.what = com.rheit.config.CODE_SOCKET_SERVER_CONNECTED; threadMessage.obj = intent; threadHandler.sendMessage(threadMessage); } } catch (Exception e) { Intent intent = new Intent(ServiceExchange.BROADCAST_ACTION); intent.putExtra("SERVER_STATUS", false); Message threadMessage = new Message(); threadMessage.what = com.rheit.config.ERR_SOCKET_SERVER_UNAVAILABLE; threadMessage.obj = intent; threadHandler.sendMessage(threadMessage); Log.e(SocketAsync.class.toString(), "ERR_SOCKET_SERVER_UNAVAILABLE doInBackground"); } Thread threadWrite = new Thread(new Runnable() { @Override public void run() { send(socket); } }); threadWrite.start();
рдЬрдм рд╣рдордиреЗ
рд╕реЙрдХреЗрдЯрд╕реЗрдиреНрд╕ рдЯрд╛рд╕реНрдХ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдордиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛; рдпрджрд┐ рд╣рдо рдХрдиреЗрдХреНрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпреВрдЖрдИ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ:
Intent intent = new Intent(ServiceExchange.BROADCAST_ACTION); intent.putExtra("SERVER_STATUS", true); Message threadMessage = new Message(); threadMessage.what = com.rheit.config.CODE_SOCKET_SERVER_CONNECTED; threadMessage.obj = intent; threadHandler.sendMessage(threadMessage);
рддрдм рдпрд╣ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛
рдмрдирд╛рдП рдЧрдП
myUpdateHandler рдореЗрдВ
ServiceExchange рдореЗрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ UI рдХреЛ sendBroadcast рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ:
case config.CODE_SOCKET_SERVER_CONNECTED:
рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛
MainActivity рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { onDataFromService(intent); } }; public void onDataFromService(Intent intent) { Log.d("onDataFromService", intent.getStringExtra("text")); }
рдЬрдм рд╣рдо рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
unregisterReceiver рдлрд╝рдВрдХреНрд╢рди рд╢реНрд░реЛрддрд╛ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд╕реЙрдХреЗрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬрд╝ рдЦреЛ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдмрд╛рд╣рд░ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рдмрд╛рдд рдХреА рд╕реВрдЪрдирд╛ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХреБрдЫ рдкрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред