release ICL02WorkService V57
authorsnickersun <scy@incartech.cn>
Mon, 12 Oct 2020 08:55:24 +0000 (16:55 +0800)
committersnickersun <scy@incartech.cn>
Mon, 12 Oct 2020 08:55:24 +0000 (16:55 +0800)
添加protocol_ic 天气查询支持。数据库有增加一条,因此需要重置才能正常工作。

app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk [new file with mode: 0644]
app/src/main/aidl/com/ic/aidl/weather/WeatherParcelable.java
app/src/main/java/com/ic/work/WorkService.java
app/src/main/java/com/ic/work/db/entity/WeatherEntity.java
app/src/main/java/com/ic/work/weather/WeatherDBRun.java
app/src/main/java/com/ic/work/weather/WeatherFromProtocol.java [new file with mode: 0644]
app/src/main/java/com/ic/work/weather/WeatherHelper.java

diff --git a/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk b/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk
new file mode 100644 (file)
index 0000000..a66b79e
Binary files /dev/null and b/app/IcL02WorkService/release/IcL02WorkService_V57_202010121650_release.apk differ
index e7c9bbb..bc24b5d 100644 (file)
@@ -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;
     }
index 16bb952..54670fa 100644 (file)
@@ -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);
 
index 343cac0..bb5e431 100644 (file)
@@ -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;
     }
index fe03e57..bdcc1a5 100644 (file)
@@ -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 (file)
index 0000000..dd009cf
--- /dev/null
@@ -0,0 +1,165 @@
+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
index 5073570..4828b0d 100644 (file)
@@ -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);
+
     }
 }