From: snickersun Date: Mon, 12 Oct 2020 08:55:24 +0000 (+0800) Subject: release ICL02WorkService V57 X-Git-Url: http://git.snicker.com.cn/Users/apple/Desktop/static/gitweb.css?a=commitdiff_plain;h=e6329d167121203c4b90a526e9892c77d135e8ad;p=icworkservice.git release ICL02WorkService V57 添加protocol_ic 天气查询支持。数据库有增加一条,因此需要重置才能正常工作。 --- diff --git a/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk new file mode 100644 index 0000000..a66b79e Binary files /dev/null and b/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk differ diff --git a/app/src/main/aidl/com/ic/aidl/weather/WeatherParcelable.java b/app/src/main/aidl/com/ic/aidl/weather/WeatherParcelable.java index e7c9bbb..bc24b5d 100644 --- a/app/src/main/aidl/com/ic/aidl/weather/WeatherParcelable.java +++ b/app/src/main/aidl/com/ic/aidl/weather/WeatherParcelable.java @@ -13,8 +13,63 @@ public class WeatherParcelable implements Parcelable { private String temperatureNight; // 晚上温度 或 最低温度 private String updateTime; // 更新时间 + + + private int statusID; //天气类型id + + /** + * 0:龙卷风 + * 1:热带风暴 + * 2:飓风 + * 3:严重的雷暴 + * 4:雷暴 + * 5:混合雨雪 + * 6:混合降雨和冰雹 + * 7:混合雪和雨夹雪 + * 8:冻结小雨 + * 9:小雨 + * 10:冻雨 + * 11:阵雨 + * 12:阵雨 + * 13:雪飘雪 + * 14:小雪阵雨 + * 15:吹雪 + * 16:雪 + * 17:冰雹 + * 18:雨夹雪 + * 19:尘埃 + * 20:雾 + * 21:霾 + * 22:黑烟 + * 23:大风 + * 24:风 + * 25:低温 + * 26:多云 + * 27:多云(晚上) + * 28:多云(白天) + * 29:局部多云(晚上) + * 30:局部多云(天) + * 31:清爽(晚) + * 32:晴天 + * 33:晴朗(晚) + * 34:晴朗(天) + * 35:混合雨和冰雹 + * 36:热 + * 37:局部地区性雷暴 + * 38:零星雷暴 + * 39:零星雷暴 + * 40:零星阵雨 + * 41:大雪 + * 42:零星阵雪 + * 43:大雪 + * 44:多云 + * 45:雷阵雨 + * 46:阵雪 + * 47:局部雷阵雨 + */ public WeatherParcelable() { city = ""; + statusID = 0; statusDay = ""; statusNight = ""; figureDay = ""; @@ -25,11 +80,13 @@ public class WeatherParcelable implements Parcelable { } public WeatherParcelable(String city, + int statusID, String statusDay, String statusNight, String figureDay, String figureNight, String temperatureDay, String temperatureNight, String updateTime) { this.city = city; + this.statusID = statusID; this.statusDay = statusDay; this.statusNight = statusNight; this.figureDay = figureDay; @@ -41,6 +98,7 @@ public class WeatherParcelable implements Parcelable { public WeatherParcelable(Parcel p) { this.city = p.readString(); + this.statusID = p.readInt(); this.statusDay = p.readString(); this.statusNight = p.readString(); this.figureDay = p.readString(); @@ -58,6 +116,7 @@ public class WeatherParcelable implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(city); + dest.writeInt(statusID); dest.writeString(statusDay); dest.writeString(statusNight); dest.writeString(figureDay); @@ -86,6 +145,15 @@ public class WeatherParcelable implements Parcelable { this.city = city; } + public int getStatusID() { + return statusID; + } + + public void setStatusID(int statusID) { + this.statusID = statusID; + } + + public String getStatusDay() { return statusDay; } diff --git a/app/src/main/java/com/ic/work/WorkService.java b/app/src/main/java/com/ic/work/WorkService.java index 16bb952..54670fa 100644 --- a/app/src/main/java/com/ic/work/WorkService.java +++ b/app/src/main/java/com/ic/work/WorkService.java @@ -132,7 +132,7 @@ public class WorkService extends Service { tempProcess = new TempProcess(); akProcess = new AkProcess(); - mWeatherHelper = new WeatherHelper(); + mWeatherHelper = new WeatherHelper(mApp.getWeatherRepository(),this); EventBus.getDefault().register(this); diff --git a/app/src/main/java/com/ic/work/db/entity/WeatherEntity.java b/app/src/main/java/com/ic/work/db/entity/WeatherEntity.java index 343cac0..bb5e431 100644 --- a/app/src/main/java/com/ic/work/db/entity/WeatherEntity.java +++ b/app/src/main/java/com/ic/work/db/entity/WeatherEntity.java @@ -13,6 +13,7 @@ public class WeatherEntity { @PrimaryKey(autoGenerate = true) private int id; private String city; + private int statusID;//天气ID private String statusDay; // 白天状态,如:晴 private String statusNight; // 晚上状态 private String figureDay; // 状态索引 @@ -30,6 +31,13 @@ public class WeatherEntity { this.id = id; } + public int getStatusID() { + return statusID; + } + + public void setStatusID(int id) { + this.statusID = id; + } public String getCity() { return city; } diff --git a/app/src/main/java/com/ic/work/weather/WeatherDBRun.java b/app/src/main/java/com/ic/work/weather/WeatherDBRun.java index fe03e57..bdcc1a5 100644 --- a/app/src/main/java/com/ic/work/weather/WeatherDBRun.java +++ b/app/src/main/java/com/ic/work/weather/WeatherDBRun.java @@ -46,6 +46,7 @@ public class WeatherDBRun implements Runnable { WeatherParcelable parcelable = new WeatherParcelable(); parcelable.setCity(entity.getCity()); + parcelable.setStatusID(entity.getStatusID()); parcelable.setFigureDay(entity.getFigureDay()); parcelable.setFigureNight(entity.getFigureNight()); parcelable.setStatusDay(entity.getStatusDay()); diff --git a/app/src/main/java/com/ic/work/weather/WeatherFromProtocol.java b/app/src/main/java/com/ic/work/weather/WeatherFromProtocol.java new file mode 100644 index 0000000..dd009cf --- /dev/null +++ b/app/src/main/java/com/ic/work/weather/WeatherFromProtocol.java @@ -0,0 +1,165 @@ +package com.ic.work.weather; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.text.TextUtils; + +import com.ic.aidl.weather.WeatherParcelable; +import com.ic.work.BuildConfig; +import com.ic.work.db.WeatherInjection; +import com.ic.work.db.entity.WeatherEntity; +import com.ic.work.event.WeatherResultEvent; +import com.ic.work.utils.IcLog; + +import org.greenrobot.eventbus.EventBus; +import org.threeten.bp.OffsetDateTime; +import org.threeten.bp.ZoneId; +import org.threeten.bp.format.DateTimeFormatter; + +import java.util.ArrayList; +import java.util.List; + +class WeatherFromProtocol { + + private final String ACTION_QUERY_WEATHER = "com.ic.action_query_weather"; + private final String ACTION_WEATHER_RECEIVED = "com.ic.action_weather_recveived"; + private final String KEY_Weather = "weather"; + + + private static final String TAG = "WeatherFromProtocol"; + + private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; + + private String mCity; + + + private Context mContext; + private WeatherInjection weatherInjection; + + public WeatherFromProtocol(WeatherInjection weatherDb,Context context) { + weatherInjection = weatherDb; + mContext=context; + registerBroadcast(); + } + + + private void registerBroadcast() { + IntentFilter filter = new IntentFilter(); + filter.addAction(ACTION_WEATHER_RECEIVED); + mContext.registerReceiver(mIntentReceiver, filter); + } + + public void sendWeatherQueryBroadcast() { + Intent pedIntent = new Intent(); + pedIntent.setAction(ACTION_QUERY_WEATHER); + mContext.sendBroadcast(pedIntent); + } + + + private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent != null) { + String acyion = intent.getAction(); + if (TextUtils.isEmpty(acyion)) { + return; + } + switch (acyion) { + case ACTION_WEATHER_RECEIVED: + String weather = intent.getStringExtra(KEY_Weather); + new Thread(){ + @Override + public void run() { + super.run(); + parseWeatherString(weather); + } + }.start(); + + break; + } + } + } + }; + + + private void parseWeatherString(String stringWeather) { + IcLog.i(TAG, "getprop weather " + stringWeather); + + List wpList = new ArrayList<>(3); + List dbList = new ArrayList<>(3); + + String list[]=stringWeather.split(";"); + if (list.length==4) { + + //南山区;2020-10-12,晴,32,24,23,31;2020-10-13,晴,32,24,23,31;2020-10-14,晴,32,24,23,31 + //宝安区;2020-10-12,多云,26,30,22,28;2020-10-13,多云,26,30,22,28;2020-10-14,多云,26,30,22,28 + String mCity=list[0]; + boolean success=true; + for (int i = 0; i < 3; i++) { + + String wlist[]=list[1+i].split(","); + IcLog.i(TAG,list[1+i]+" "+wlist.length); + if(wlist.length==6) { + WeatherParcelable weather = new WeatherParcelable(); + WeatherEntity db = new WeatherEntity(); + weather.setCity(mCity); + db.setCity(mCity); + + weather.setStatusDay(wlist[1]); // 白天天气描述 + db.setStatusDay(weather.getStatusDay()); + weather.setStatusNight(wlist[1]); // 夜间天气描述 + db.setStatusNight(weather.getStatusNight()); + + int statusid = 0; + try { + statusid = Integer.parseInt(wlist[2].trim()); + } catch (Exception e) { + e.printStackTrace(); + } + weather.setStatusID(statusid);// 天气索引 + db.setStatusID(statusid); + + weather.setFigureDay(wlist[3]); // 天气索引 + db.setFigureDay(weather.getFigureDay()); + weather.setFigureNight(wlist[3]); + db.setFigureNight(weather.getFigureNight()); + + weather.setTemperatureDay(wlist[4]); // 白天温度-对应“和风天气”的最低温度 + db.setTemperatureDay(weather.getTemperatureDay()); + weather.setTemperatureNight(wlist[5]); // 夜间温度-对应“和风天气”的最高温度 + db.setTemperatureNight(weather.getTemperatureNight()); + + weather.setUpdateTime(wlist[0]); + db.setUpdateTime(wlist[0]); + db.setQueryTime(OffsetDateTime.now(ZoneId.systemDefault())); + + if (BuildConfig.DEBUG) { + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(weather.getStatusDay()).append("-").append(weather.getStatusNight()) + .append("|") + .append(weather.getTemperatureDay()).append("-").append(weather.getTemperatureNight()) + .append("|") + .append(weather.getUpdateTime()); + IcLog.i(TAG, "Response is weather:" + stringBuffer.toString()); + } + + wpList.add(weather); + dbList.add(db); + }else{ + IcLog.i(TAG,"Weather Format error!"); + success=false; + break; + } + } + if(success) { + EventBus.getDefault().post(new WeatherResultEvent(wpList)); + weatherInjection.deleteDBWeatherDate(); + weatherInjection.insertWeatherEntity(dbList); + } + }else{ + IcLog.i(TAG,"Weather Format error!"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/ic/work/weather/WeatherHelper.java b/app/src/main/java/com/ic/work/weather/WeatherHelper.java index 5073570..4828b0d 100644 --- a/app/src/main/java/com/ic/work/weather/WeatherHelper.java +++ b/app/src/main/java/com/ic/work/weather/WeatherHelper.java @@ -11,14 +11,28 @@ import com.ic.work.weather.melon.SocketThread; public class WeatherHelper { private LocationHelper mLocation = null; + private final boolean disable_eiot_weather=true; + private WeatherFromProtocol weatherFromProtocol; + private Context mContext; + public WeatherHelper(WeatherInjection weatherDb,Context context){ + mContext=context; + weatherFromProtocol = new WeatherFromProtocol(weatherDb,mContext); + } public void startLocation(Context context) { - //如果已经定位成功 - mLocation = new LocationHelper(context); - mLocation.startLocationService(); + if (disable_eiot_weather){ + weatherFromProtocol.sendWeatherQueryBroadcast(); + }else { + //如果已经定位成功 + mLocation = new LocationHelper(context); + mLocation.startLocationService(); + } } private void stopLocation() { + if(disable_eiot_weather){ + return; + } if (mLocation != null) { mLocation.stopLocationService(); mLocation = null; @@ -28,9 +42,12 @@ public class WeatherHelper { public void queryWeatherServerInfo(WeatherInjection weatherDb,LocationState state) { + if (disable_eiot_weather) { + return; + } stopLocation(); - if(!state.isState() || TextUtils.isEmpty(state.getCity())){ + if (state == null || !state.isState() || TextUtils.isEmpty(state.getCity())) { //定位失败 或者获取到的城市为空 return; } @@ -43,7 +60,8 @@ public class WeatherHelper { paramJson.put("channel", "西瓜皮-西瓜皮"); final String param = paramJson.toJSONString(); - SocketThread socket = new SocketThread(weatherDb,serverHost, port, param,state.getCity()); + SocketThread socket = new SocketThread(weatherDb, serverHost, port, param, state.getCity()); ThreadPoolManager.getInstance().execute(socket); + } }