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 = "";
}
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;
public WeatherParcelable(Parcel p) {
this.city = p.readString();
+ this.statusID = p.readInt();
this.statusDay = p.readString();
this.statusNight = p.readString();
this.figureDay = p.readString();
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(city);
+ dest.writeInt(statusID);
dest.writeString(statusDay);
dest.writeString(statusNight);
dest.writeString(figureDay);
this.city = city;
}
+ public int getStatusID() {
+ return statusID;
+ }
+
+ public void setStatusID(int statusID) {
+ this.statusID = statusID;
+ }
+
+
public String getStatusDay() {
return statusDay;
}
--- /dev/null
+package com.ic.work.weather;\r
+\r
+import android.content.BroadcastReceiver;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.IntentFilter;\r
+import android.text.TextUtils;\r
+\r
+import com.ic.aidl.weather.WeatherParcelable;\r
+import com.ic.work.BuildConfig;\r
+import com.ic.work.db.WeatherInjection;\r
+import com.ic.work.db.entity.WeatherEntity;\r
+import com.ic.work.event.WeatherResultEvent;\r
+import com.ic.work.utils.IcLog;\r
+\r
+import org.greenrobot.eventbus.EventBus;\r
+import org.threeten.bp.OffsetDateTime;\r
+import org.threeten.bp.ZoneId;\r
+import org.threeten.bp.format.DateTimeFormatter;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+class WeatherFromProtocol {\r
+\r
+ private final String ACTION_QUERY_WEATHER = "com.ic.action_query_weather";\r
+ private final String ACTION_WEATHER_RECEIVED = "com.ic.action_weather_recveived";\r
+ private final String KEY_Weather = "weather";\r
+\r
+\r
+ private static final String TAG = "WeatherFromProtocol";\r
+\r
+ private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;\r
+\r
+ private String mCity;\r
+\r
+\r
+ private Context mContext;\r
+ private WeatherInjection weatherInjection;\r
+\r
+ public WeatherFromProtocol(WeatherInjection weatherDb,Context context) {\r
+ weatherInjection = weatherDb;\r
+ mContext=context;\r
+ registerBroadcast();\r
+ }\r
+\r
+\r
+ private void registerBroadcast() {\r
+ IntentFilter filter = new IntentFilter();\r
+ filter.addAction(ACTION_WEATHER_RECEIVED);\r
+ mContext.registerReceiver(mIntentReceiver, filter);\r
+ }\r
+\r
+ public void sendWeatherQueryBroadcast() {\r
+ Intent pedIntent = new Intent();\r
+ pedIntent.setAction(ACTION_QUERY_WEATHER);\r
+ mContext.sendBroadcast(pedIntent);\r
+ }\r
+\r
+\r
+ private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {\r
+ @Override\r
+ public void onReceive(Context context, Intent intent) {\r
+ if (intent != null) {\r
+ String acyion = intent.getAction();\r
+ if (TextUtils.isEmpty(acyion)) {\r
+ return;\r
+ }\r
+ switch (acyion) {\r
+ case ACTION_WEATHER_RECEIVED:\r
+ String weather = intent.getStringExtra(KEY_Weather);\r
+ new Thread(){\r
+ @Override\r
+ public void run() {\r
+ super.run();\r
+ parseWeatherString(weather);\r
+ }\r
+ }.start();\r
+\r
+ break;\r
+ }\r
+ }\r
+ }\r
+ };\r
+\r
+\r
+ private void parseWeatherString(String stringWeather) {\r
+ IcLog.i(TAG, "getprop weather " + stringWeather);\r
+\r
+ List<WeatherParcelable> wpList = new ArrayList<>(3);\r
+ List<WeatherEntity> dbList = new ArrayList<>(3);\r
+\r
+ String list[]=stringWeather.split(";");\r
+ if (list.length==4) {\r
+\r
+ //南山区;2020-10-12,晴,32,24,23,31;2020-10-13,晴,32,24,23,31;2020-10-14,晴,32,24,23,31\r
+ //宝安区;2020-10-12,多云,26,30,22,28;2020-10-13,多云,26,30,22,28;2020-10-14,多云,26,30,22,28\r
+ String mCity=list[0];\r
+ boolean success=true;\r
+ for (int i = 0; i < 3; i++) {\r
+\r
+ String wlist[]=list[1+i].split(",");\r
+ IcLog.i(TAG,list[1+i]+" "+wlist.length);\r
+ if(wlist.length==6) {\r
+ WeatherParcelable weather = new WeatherParcelable();\r
+ WeatherEntity db = new WeatherEntity();\r
+ weather.setCity(mCity);\r
+ db.setCity(mCity);\r
+\r
+ weather.setStatusDay(wlist[1]); // 白天天气描述\r
+ db.setStatusDay(weather.getStatusDay());\r
+ weather.setStatusNight(wlist[1]); // 夜间天气描述\r
+ db.setStatusNight(weather.getStatusNight());\r
+\r
+ int statusid = 0;\r
+ try {\r
+ statusid = Integer.parseInt(wlist[2].trim());\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ weather.setStatusID(statusid);// 天气索引\r
+ db.setStatusID(statusid);\r
+\r
+ weather.setFigureDay(wlist[3]); // 天气索引\r
+ db.setFigureDay(weather.getFigureDay());\r
+ weather.setFigureNight(wlist[3]);\r
+ db.setFigureNight(weather.getFigureNight());\r
+\r
+ weather.setTemperatureDay(wlist[4]); // 白天温度-对应“和风天气”的最低温度\r
+ db.setTemperatureDay(weather.getTemperatureDay());\r
+ weather.setTemperatureNight(wlist[5]); // 夜间温度-对应“和风天气”的最高温度\r
+ db.setTemperatureNight(weather.getTemperatureNight());\r
+\r
+ weather.setUpdateTime(wlist[0]);\r
+ db.setUpdateTime(wlist[0]);\r
+ db.setQueryTime(OffsetDateTime.now(ZoneId.systemDefault()));\r
+\r
+ if (BuildConfig.DEBUG) {\r
+ StringBuffer stringBuffer = new StringBuffer();\r
+ stringBuffer.append(weather.getStatusDay()).append("-").append(weather.getStatusNight())\r
+ .append("|")\r
+ .append(weather.getTemperatureDay()).append("-").append(weather.getTemperatureNight())\r
+ .append("|")\r
+ .append(weather.getUpdateTime());\r
+ IcLog.i(TAG, "Response is weather:" + stringBuffer.toString());\r
+ }\r
+\r
+ wpList.add(weather);\r
+ dbList.add(db);\r
+ }else{\r
+ IcLog.i(TAG,"Weather Format error!");\r
+ success=false;\r
+ break;\r
+ }\r
+ }\r
+ if(success) {\r
+ EventBus.getDefault().post(new WeatherResultEvent(wpList));\r
+ weatherInjection.deleteDBWeatherDate();\r
+ weatherInjection.insertWeatherEntity(dbList);\r
+ }\r
+ }else{\r
+ IcLog.i(TAG,"Weather Format error!");\r
+ }\r
+ }\r
+}
\ No newline at end of file
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;
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;
}
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);
+
}
}