/
SoRusV
/
src_xendil
Обзор
Документация
Войти
/
SoRusV
/
src_xendil
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Android/MServiceUdp.java
318 строк
11 KB
ruslan
Initial commit
29 окт 2024, 11:18
29 окт 2024, 11:18
5c4dcf5
Код
Авторство
О чём код?
package com.example.scord.scord; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.SystemClock; import android.util.Log; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; class MMsgIP { String sMsg; String sIP; String sID=""; String AquaName=""; String CloneName=""; String Name=""; int bTabLight=0; int bTabTimer=0; int bTabTemperature=0; MMsgIP(String sMsg_, String IP_){ sMsg=sMsg_; sIP=IP_; try { JSONObject JO= new JSONObject(sMsg); sID=JO.getJSONObject("Data").getJSONObject("0").getString("ID"); } catch (JSONException e) { } //sID=ID_; } } class MGetUdp extends Thread { private Context context; public ArrayList<MMsgIP> LMsgIP = new ArrayList(); MUdp udp; Handler H; boolean bNeedRefreshLMsgIP=true; // private static final Object MonitorNeedRefreshLMsgIP = new Object(); public static final Object SNeedRefreshLMsgIP=new Object(); /// for sync MGetUdp(Context context_, Handler H_) { context=context_; H=H_; }; // // public void sendData() { // synchronized (M) { // System.out.println("Waiting for data..."); // // while (!ready) { // try { // monitor.wait(); // } catch (InterruptedException e) { // e.printStackTrace(); // } // } // // // continue execution and sending data // System.out.println("Sending data..."); // //} // } @Override public void run() { try { Log.v("TAGW", "MGetUdp::run() @"+Here.At()); udp = new MUdp(context, new MUdp.BroadcastListener() { @Override public void onReceive(String sMsg, String sIP) { try { JSONObject JO= new JSONObject(sMsg); String sID=JO.getJSONObject("Data").getJSONObject("0").getString("ID"); int i; for(i=0; i< LMsgIP.size(); i++) if(LMsgIP.get(i).sID.compareTo(sID)==0) /// if equal break; if(i< LMsgIP.size()) { if(LMsgIP.get(i).sMsg.compareTo(sMsg)!=0) { if (LMsgIP.get(i).sID.compareTo(sID) != 0){ LMsgIP.get(i).sMsg = sMsg; H.sendEmptyMessage(1); } } } else{ // if(i>= LMsgIP.size()) { LMsgIP.add(new MMsgIP(sMsg, sIP)); H.sendEmptyMessage(1); } //+ Log.v("TAGW", "receive message "+sMsg+" from "+sIP); } catch (JSONException e) { } } }); udp.start(); } catch (IOException e) { Log.v("TAGW", "catch1 @"+Here.At()); e.printStackTrace(); } synchronized (SNeedRefreshLMsgIP) { while (true) { try { if(!bNeedRefreshLMsgIP) SNeedRefreshLMsgIP.wait(); } catch (InterruptedException e) { e.printStackTrace(); } Log.v("TAGW", "Thread up @"+Here.At()); if(bNeedRefreshLMsgIP) { RefreshLMsgIP(); bNeedRefreshLMsgIP=false; } } } // sendData(); // while(true) // { // try { // TimeUnit.MILLISECONDS.sleep(100); // } catch (InterruptedException e) { // e.printStackTrace(); // } // if(bNeedRefreshLMsgIP) // RefreshLMsgIP(); // } } public void RefreshLMsgIP() { Log.v("TAGW", "MGetUdp::RefreshLMsgIP @"+Here.At()); LMsgIP.clear(); try { Calendar cal = Calendar.getInstance(); int Y = cal.get(Calendar.YEAR); int Mn = cal.get(Calendar.MONTH)+1; int D = cal.get(Calendar.DAY_OF_MONTH); int WD = cal.get(Calendar.DAY_OF_WEEK); int H = cal.get(Calendar.HOUR_OF_DAY); //24 hour format int M = cal.get(Calendar.MINUTE); int S = cal.get(Calendar.SECOND)+1; String sU="{\"Command\":\"RefreshUDP\",\"VerUdp\":20170822, \"TimeL\":" + "{\"Y\":"+Y+",\"Mn\":"+Mn+",\"D\":"+D+",\"WD\":"+WD+",\"H\":"+H+",\"M\":"+M+",\"S\":"+S+"}}"; udp.send(sU); /// send command Refresh } catch (IOException e) { Log.v("TAGW", "catch @"+Here.At()); } H.sendEmptyMessage(1); bNeedRefreshLMsgIP=false; } } public class MServiceUdp extends Service { private static final long dTMinRefreshLMsgIPms = 5*1000; /// 5 min private MGetUdp GetUdp; long LastRefreshLMsgIPms=0L; MBinder Binder0 = new MBinder(); Handler H; String WiFiSSIDLast=""; BroadcastReceiver BrReceiverWiFi; BroadcastReceiver BrReceiverScreen; public MServiceUdp() { } public void onCreate() { super.onCreate(); Log.d("TAGW", "onCreate Service @"+Here.At()); } public int onStartCommand(Intent intent, int flags, int startId) { Log.d("TAGW", "onStartCommand"); if(H==null) H = new Handler() { public void handleMessage(android.os.Message msg) { if(msg.what==1){ /// GetUdp.LMsgIPm - changed Log.v("TAGW", "@@@@@@GetUdp.LMsgIP was update @"+Here.At()); Intent intent = new Intent(ActivityLEsp.BrScordName); // Log.d(LOG_TAG, "MyRun#" + startId + " start, time = " + time); // try { intent.putExtra("ListEspChange", true); sendBroadcast(intent); // } // catch (InterruptedException e) { // e.printStackTrace(); // } } } }; if (GetUdp == null) { GetUdp = new MGetUdp(getApplicationContext(), H); GetUdp.start(); LastRefreshLMsgIPms = SystemClock.uptimeMillis(); } if(BrReceiverWiFi==null) { BrReceiverWiFi = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); Log.v("TAGW", action + " @" + Here.At()); CheckWiFi(); } }; IntentFilter FilterWiFi = new IntentFilter(); FilterWiFi.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(BrReceiverWiFi, FilterWiFi); } if(BrReceiverScreen==null) { BrReceiverScreen = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { try { Log.v("TAGW", "ReciveScreenOn @" + Here.At()); if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { CheckWiFi(); RefreshLMsgIP(false); } } catch (Exception e) { Log.v("TAGW", "!!! catch ACTION_SCREEN_ON"); } } }; IntentFilter FilterScr = new IntentFilter(); FilterScr.addAction(Intent.ACTION_SCREEN_ON); registerReceiver(BrReceiverScreen, FilterScr); } if(intent.getBooleanExtra("RefreshLMsgIP", false)) RefreshLMsgIP(true); return super.onStartCommand(intent, flags, startId); } public void onDestroy() { Log.d("TAGW", "onDestroy servise @"+Here.At()); unregisterReceiver(BrReceiverWiFi); unregisterReceiver(BrReceiverScreen); super.onDestroy(); } void RefreshLMsgIP(boolean bManual){ /// if(bManual) mandatory call to RefreshLMsgIP, else call to RefreshLMsgIP depends on dTMinRefreshLMsgIPms Log.v("TAGW", "MServiceUdp::RefreshLMsgIP @"+Here.At()); if( (SystemClock.uptimeMillis()-LastRefreshLMsgIPms) > dTMinRefreshLMsgIPms || bManual) { Log.v("TAGW", "RefreshLMsgIP @"+Here.At()); LastRefreshLMsgIPms = SystemClock.uptimeMillis(); // GetUdp.bNeedRefreshLMsgIP=true; synchronized (GetUdp.SNeedRefreshLMsgIP){ GetUdp.bNeedRefreshLMsgIP=true; GetUdp.SNeedRefreshLMsgIP.notifyAll(); } } } ArrayList<MMsgIP> GetLMsgIP(){ if(GetUdp!=null) return GetUdp.LMsgIP; return null; } boolean CheckWiFi(){ /// if was call to RefreshLMsgIP then return true, else return false ConnectivityManager CM = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ActiveNetwork = CM.getActiveNetworkInfo(); boolean isConnected = ActiveNetwork != null && ActiveNetwork.isConnectedOrConnecting(); Log.v("TAGW", "isConnected: "+isConnected+" @"+Here.At()); if (!isConnected){ WiFiSSIDLast=""; RefreshLMsgIP(true); /// Clear LMsgIP return true; } boolean isWiFi = ActiveNetwork.getType() == ConnectivityManager.TYPE_WIFI; Log.v("TAGW", "isWiFi: "+isWiFi+" @"+Here.At()); if (!isWiFi) { WiFiSSIDLast=""; RefreshLMsgIP(true); /// Clear LMsgIP return true; } WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo connectionInfo = wifiManager.getConnectionInfo(); Log.v("TAGW", connectionInfo.getSSID()+" @"+Here.At()); if(WiFiSSIDLast.compareTo(connectionInfo.getSSID())!=0){ RefreshLMsgIP(true); WiFiSSIDLast=connectionInfo.getSSID(); return true; } return false; } public IBinder onBind(Intent arg0) { Log.v("TAGW", "MServiceUdp::onBind @"+Here.At()); return Binder0; } class MBinder extends Binder { MServiceUdp getService() { return MServiceUdp.this; } } }