Skip to content

Commit 1b5ec2b

Browse files
author
wenlong
committed
增加位置保存,修改数据库打开错误
1 parent 95e7c5e commit 1b5ec2b

File tree

7 files changed

+98
-49
lines changed

7 files changed

+98
-49
lines changed

AndroidManifest.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@
2222
<uses-permission android:name="android.permission.WAKE_LOCK" />
2323
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
2424
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
25-
25+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--写入sdcard-->
26+
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 读取sdcard-->
27+
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 在sdcard中创建/删除文件的权限 -->
28+
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 录音权限 -->
2629
<application
2730
android:name="com.obd.app.MGApp"
2831
android:allowBackup="true"

src/com/obd/observer/DRObserver.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.comobd.zyobd.port.Subject;
99
import com.obd.service.DataSyncService;
1010
import com.obd.simpleexample.StatusInface;
11+
import com.obd.utils.DBmanager;
1112

1213
import de.greenrobot.event.EventBus;
1314

@@ -31,6 +32,7 @@ public void update(JSONObject jsonString) {
3132
//StatusInface.getInstance().postRSO(jsonString);
3233
DataSyncService.postEvent(2, jsonString);
3334
Log.e(TAG, jsonString.toString());
35+
DBmanager.getInase().insertBackupNote(jsonString.toString(),"");
3436
}
3537

3638
}

src/com/obd/service/DataSyncService.java

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,13 @@
4141
import android.util.Log;
4242

4343
public class DataSyncService extends Service{
44+
public final static int RefreshTime = 30*1000;
4445

4546
private static String TAG = "DataSyncService";
4647
private GetLoaction mGetLoaction = new GetLoaction();
4748
NetWork mNetWork = new NetWork();
4849

50+
4951
public class LocalBinder extends Binder {
5052
public DataSyncService getService() {
5153
return DataSyncService.this;
@@ -63,7 +65,7 @@ public void onCreate() {
6365
openADB();
6466
getIMEI();
6567
initSingle();
66-
68+
startUploadPos();
6769
mNetWork.start();
6870
}
6971

@@ -107,27 +109,26 @@ private void locationInit(){
107109
LocationClientOption option = new LocationClientOption();
108110
option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式//option.setOpenGps(true);// 打开gps
109111
option.setCoorType("bd09ll"); // 设置坐标类型
110-
option.setScanSpan(30*1000);
112+
option.setScanSpan(RefreshTime);
111113
mLocClient.setLocOption(option);
112114

113115
mHandler.postDelayed(new Runnable() {
114-
115116
@Override
116117
public void run() {
117118
// TODO Auto-generated method stub
118119
mLocClient.start();
119120
}
120-
}, 0*1000);
121+
}, 10*1000);
121122

122123
Log.d(TAG,"百度定位 初始化成功");
123124
}
124125
public class MyLocationListenner implements BDLocationListener {
125126
@Override
126127
public void onReceiveLocation(BDLocation location) {
128+
location = getBDLocation(location);
127129
if (location == null) {Log.e(TAG,"百度定位失败"); return;}
128130
Log.d(TAG,"百度定位成功:"+location.getLongitude()+","+location.getLatitude());
129-
mGetLoaction.uploadPos(location);
130-
131+
//mGetLoaction.uploadPos(location);
131132
}
132133
public void onReceivePoi(BDLocation poiLocation) {}
133134
}
@@ -140,11 +141,16 @@ public void saveLastPos(BDLocation location){
140141
MyLog.D("百度定位地址保存成功");
141142
}
142143
public BDLocation getLastPos(BDLocation location){
143-
if(location!=null){
144-
location.setLatitude(QuickShPref.getFloat(QuickShPref.LAT));
145-
location.setLongitude(QuickShPref.getFloat(QuickShPref.LON));
146-
location.setTime(QuickShPref.getString(QuickShPref.TimeLastLoc));
144+
if(location==null){
145+
if(QuickShPref.getString(QuickShPref.TimeLastLoc)==null){
146+
return null;
147+
}
148+
location = new BDLocation();
147149
}
150+
location.setLatitude(QuickShPref.getFloat(QuickShPref.LAT));
151+
location.setLongitude(QuickShPref.getFloat(QuickShPref.LON));
152+
location.setTime(QuickShPref.getString(QuickShPref.TimeLastLoc));
153+
MyLog.D("获取最后的有效地址");
148154
return location;
149155
}
150156

@@ -193,7 +199,6 @@ private void initOBD(){
193199
Log.d(TAG, "initOBD");
194200
sv = new StatusVehicle();
195201

196-
197202
OBDAPI obdapi = OBDAPI.getInstance(this.getApplicationContext(),sv);
198203
RSObserver rsObserver = new RSObserver(obdapi);
199204
// BObserver bObserver = new BObserver(obdapi);
@@ -205,22 +210,19 @@ private void initOBD(){
205210

206211
public String getIMEI(){
207212
String imei = QuickShPref.getString(QuickShPref.IEMI);
208-
209213
if(imei == null || imei.length() == 0){
210-
imei =((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
214+
imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
211215
if(imei == null)
212216
imei = "";
213217
Log.d("ieme", imei);
214218
QuickShPref.putValueObject(QuickShPref.IEMI, imei);
215219
mGetLoaction.mIMEI = imei;
216220
StatusInface.getInstance().mIEMI = imei;
217-
218221
}
219-
220222
return imei;
221223
}
222224

223-
private class MyPhoneStateListener extends PhoneStateListener{
225+
private class MyPhoneStateListener extends PhoneStateListener{
224226
/* Get the Signal strength from the provider, each tiome there is an update 从得到的信号强度,每个tiome供应商有更新*/
225227
@Override
226228
public void onSignalStrengthsChanged(SignalStrength signalStrength){
@@ -230,20 +232,31 @@ public void onSignalStrengthsChanged(SignalStrength signalStrength){
230232
}
231233
}
232234

235+
private void startUploadPos(){
236+
mHandler.postDelayed(mUploadRun, RefreshTime/3);
237+
}
238+
public Runnable mUploadRun = new Runnable(){
239+
public void run() {
240+
mGetLoaction.uploadPos(getLastPos(null));
241+
mNetWork.interruptMain();
242+
mHandler.postDelayed(this, RefreshTime);
243+
}
244+
};
245+
233246
public void onEventMainThread(String result) {
234247
MyLog.D("onEventMainThread String ret="+result);
235248
StatusInface.getInstance().vehicleResult(result);
236249
}
237250
public void onEventMainThread(JsonMsg msg) {
238251
switch (msg.what) {
239-
case 2:
240-
StatusInface.getInstance().DROinface(msg.obj);
241-
break;
242-
case 1:
243-
StatusInface.getInstance().RSOinface(msg.obj);
244-
break;
245-
default:
246-
break;
252+
case 2:
253+
StatusInface.getInstance().DROinface(msg.obj);
254+
break;
255+
case 1:
256+
StatusInface.getInstance().RSOinface(msg.obj);
257+
break;
258+
default:
259+
break;
247260
}
248261

249262
}
@@ -259,17 +272,21 @@ private BDLocation getBDLocation(BDLocation loc){
259272
if(loc!=null){
260273
String time = loc.getTime();
261274
String lastLocTime = QuickShPref.getString(QuickShPref.TimeLastLoc);
262-
if(time == null){
275+
MyLog.D("lastLocTime="+lastLocTime+",time="+time+".");
276+
if(time == null || loc.getLatitude() == Double.MIN_VALUE){
263277
return getLastPos(loc);
264278
}else{
279+
if(lastLocTime!=null)
280+
MyLog.D("compareTo="+time.compareTo(lastLocTime));
265281
time = mGetLoaction.formatTime(time);
266-
267-
if(time.compareTo(lastLocTime)>0){
268-
282+
if(lastLocTime==null || (time!=null&&time.compareTo(lastLocTime)>0)){
283+
loc.setTime(time);
284+
saveLastPos(loc);
269285
}
270286
}
271-
287+
}else{
288+
return getLastPos(loc);
272289
}
273-
return null;
290+
return loc;
274291
}
275292
}

src/com/obd/simpleexample/StatusVehicle.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.util.Log;
44

55
import com.comobd.zyobd.listener.StatusVehicleListener;
6+
import com.obd.utils.DBmanager;
67
import com.obd.utils.MyLog;
78

89
import de.greenrobot.event.EventBus;
@@ -23,6 +24,7 @@ public String callBack(String result) {
2324
EventBus.getDefault().post(result);
2425
//MyLog.E("callBack result="+result);
2526
//StatusInface.getInstance().vehicleResult(result);
27+
DBmanager.getInase().insertBackupNote(result,"");
2628
return result;
2729
}
2830

src/com/obd/utils/DBmanager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ public DbItem getLastContent(){
8686
item.content = cursor.getString(cursor.getColumnIndex(COLUM_CONTENT));
8787
item.id = cursor.getInt(cursor.getColumnIndex(COLUM_ID));
8888
}
89+
if(cursor!=null)
90+
cursor.close();
8991
return item;
9092
}
9193

src/com/obd/widget/GetLoaction.java

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,25 @@ public GetLoaction(){
3333
}
3434

3535
public String uploadPos(BDLocation location) {
36+
if(location == null || location.getTime() == null){
37+
MyLog.E("定位数据为空,不上报");
38+
return null;
39+
}
3640

3741
String time = location.getTime();
3842

39-
if(time!=null) time = formatTime(time);
43+
// if(time!=null) time = formatTime(time);
4044

4145
if(time == null || time.length()<19){
42-
if(time!=null)
43-
Log.d("tag", "定位数据有误,不上报:"+time);
46+
MyLog.E("定位数据有误,不上报:time="+time);
4447
return null;
4548
}
4649
double lon = location.getLongitude();
4750
double lat = location.getLatitude();//gps.mLat; // 纬度
4851

4952
// 如果经纬度为0,则不上报
50-
if (lon == 0 || lat == 0) {
53+
if (lon == Double.MIN_VALUE || lat == Double.MIN_VALUE) {
54+
MyLog.E("定位数据有误,不上报:"+time);
5155
return null;
5256
}
5357

@@ -125,24 +129,21 @@ public String uploadPos(BDLocation location) {
125129
QuickShPref.putValueObject(QuickShPref.StartTme, StatusInface.getInstance().getTime());
126130
QuickShPref.putValueObject(QuickShPref.StartLat, latStartString);
127131
QuickShPref.putValueObject(QuickShPref.StartLon, lonStartString);
128-
try {
129-
Runtime.getRuntime().exec("sync");
130-
} catch (IOException e) {
131-
// TODO Auto-generated catch block
132-
e.printStackTrace();
133-
}
134132
}else{
135133
DROInfo mDROInfo = StatusInface.getInstance().getDROInfo();
136134
if(mDROInfo != null){
137135
String startLon = QuickShPref.getString(QuickShPref.StartLon);
138136
String startLat = QuickShPref.getString(QuickShPref.StartLat);
139137
String startTime = QuickShPref.getString(QuickShPref.StartTme);
140138

141-
if(startTime != null || startLat != null || startLon != null){
139+
if(strNotEmpty(startTime) && strNotEmpty(startLat) && strNotEmpty(startLon)){
142140
buffer.append(String.format("&S2,%s,%sE,%sN,%d,%d,5,%s,%s,%s,%s,0", startTime,
143141
startLon,startLat,mDROInfo.getMILESM(),mDROInfo.getFuleSmL(),
144142
mDROInfo.RACLS,mDROInfo.BRAKES,mDROInfo.STARTS,mDROInfo.STARTS));
145143
DBmanager.getInase().insertBackupNote(buffer.toString(),mDROInfo.note);
144+
QuickShPref.putValueObject(QuickShPref.StartTme, "");
145+
QuickShPref.putValueObject(QuickShPref.StartLat, "");
146+
QuickShPref.putValueObject(QuickShPref.StartLon, "");
146147
}else{
147148
MyLog.E("startTime="+startTime+",startLat="+startLat+",startLon="+startLon);
148149
}
@@ -156,9 +157,26 @@ public String uploadPos(BDLocation location) {
156157
buffer.append('#');
157158

158159
mDBmanager.insert(buffer.toString());
160+
161+
sync();
162+
159163
return buffer.toString();
160164
}
161-
165+
public boolean strNotEmpty(String str){
166+
if(str !=null && str.length()>0){
167+
return true;
168+
}else{
169+
return false;
170+
}
171+
}
172+
public void sync(){
173+
try {
174+
Runtime.getRuntime().exec("sync");
175+
} catch (IOException e) {
176+
// TODO Auto-generated catch block
177+
e.printStackTrace();
178+
}
179+
}
162180
public String genHead(){
163181
return "*MG200" + mIMEI + ",BA%s#";
164182
}
@@ -206,7 +224,7 @@ public String formatTime(String time){
206224
return null;
207225
}
208226
ret = String.format("%04d-%02d-%02d %02d:%02d:%02d", y,m,d,h,min,s);
209-
Log.d("time", ret);
227+
//Log.d("time", ret);
210228
}
211229
return ret;
212230
}

src/com/obd/widget/NetWork.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,27 @@ public class NetWork {
1717
private InputStream mSocketReader;
1818
private OutputStream mSocketWriter;
1919
private DBmanager mDBmanager;
20-
20+
private Thread mMainThread;
2121
public NetWork(){
2222
mDBmanager = DBmanager.getInase();
2323
}
2424

25+
public void interruptMain(){
26+
if(mMainThread!=null){
27+
mMainThread.interrupt();
28+
}
29+
}
30+
2531
public void start(){
26-
new Thread(){
27-
32+
mMainThread = new Thread(){
2833
@Override
2934
public void run() {
3035
// TODO Auto-generated method stub
3136
super.run();
3237
mainRun();
3338
}
34-
35-
}.start();
39+
};
40+
mMainThread.start();
3641
}
3742

3843
public void mainRun(){

0 commit comments

Comments
 (0)