diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5a2703e6..2ac445c4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,8 @@
+
+
@@ -29,8 +31,6 @@
-
-
@@ -75,6 +75,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
index b7fa41d3..79b895aa 100644
--- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
+++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
@@ -14,6 +14,8 @@ import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
+import android.net.ConnectivityManager;
+import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
@@ -75,6 +77,7 @@ public class MicroPhotoService extends Service {
public static final int CONNECTED = 10;
public static final int NOT_CONNECTED = 0;
}
+ private static int mStateService = STATE_SERVICE.NOT_CONNECTED;
private String mCmdid = "";
private NotificationManager mNotificationManager;
@@ -84,7 +87,12 @@ public class MicroPhotoService extends Service {
private PositionManager mPositionManager = null;
private final Map mTimers = new HashMap<>();
- private static int stateService = STATE_SERVICE.NOT_CONNECTED;
+
+ protected long mHandler = 0;
+ private AlarmReceiver mAlarmReceiver = null;
+ private ScreenActionReceiver mScreenaAtionReceiver = null;
+ private NetworkChangedReceiver mNetworkChangedReceiver = null;
+
public MicroPhotoService() {
}
@Override
@@ -97,19 +105,30 @@ public class MicroPhotoService extends Service {
super.onCreate();
mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- stateService = STATE_SERVICE.NOT_CONNECTED;
+ mStateService = STATE_SERVICE.NOT_CONNECTED;
DeviceUtil.getPhoneState(this.getApplicationContext());
- alarmReceiver = new AlarmReceiver(this);
- screenactionreceiver = new ScreenActionReceiver();
+
+ mScreenaAtionReceiver = new ScreenActionReceiver();
// 注册广播接受者
- IntentFilter intentFilter = new IntentFilter(ACTION_HEARTBEAT);
- intentFilter.addAction(ACTION_TAKE_PHOTO);
- intentFilter.addAction(ACTION_TIMEOUT);
- intentFilter.addAction(ACTION_TAKE_PHOTO_MANUALLY);
- registerReceiver(alarmReceiver, intentFilter);
+ {
+ mAlarmReceiver = new AlarmReceiver(this);
+ IntentFilter intentFilter = new IntentFilter(ACTION_HEARTBEAT);
+ intentFilter.addAction(ACTION_TAKE_PHOTO);
+ intentFilter.addAction(ACTION_TIMEOUT);
+ intentFilter.addAction(ACTION_TAKE_PHOTO_MANUALLY);
+ registerReceiver(mAlarmReceiver, intentFilter);
+ }
+ {
+ mNetworkChangedReceiver = new NetworkChangedReceiver();
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
+ filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
+ registerReceiver(mNetworkChangedReceiver, filter);
+ }
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
@@ -136,13 +155,14 @@ public class MicroPhotoService extends Service {
@Override
public void onDestroy() {
- stateService = STATE_SERVICE.NOT_CONNECTED;
+ mStateService = STATE_SERVICE.NOT_CONNECTED;
uninit(mHandler);
mHandler = 0;
- unregisterReceiver(alarmReceiver);
- unregisterReceiver(screenactionreceiver);
+ unregisterReceiver(mAlarmReceiver);
+ unregisterReceiver(mScreenaAtionReceiver);
+ unregisterReceiver(mNetworkChangedReceiver);
for(Map.Entry entry : mWakeLocks.entrySet()) {
entry.getValue().release();
@@ -331,6 +351,7 @@ public class MicroPhotoService extends Service {
}
return 0;
}
+
public boolean registerTimer(PendingIntent pendingIntent, long uid, int timeout) {
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
@@ -340,6 +361,7 @@ public class MicroPhotoService extends Service {
Log.i(TAG, "RegTimer:" + uid + " timeout=" + timeout);
return true;
}
+
public boolean unregisterTimer(long uid) {
Long uidObj = Long.valueOf(uid);
@@ -450,7 +472,7 @@ public class MicroPhotoService extends Service {
connect();
- registerReceiver(screenactionreceiver, screenactionreceiver.getFilter());
+ registerReceiver(mScreenaAtionReceiver, mScreenaAtionReceiver.getFilter());
// File path = getApplicationContext().getFilesDir();
String appPath = buildAppDir(this.getApplicationContext());
@@ -486,7 +508,7 @@ public class MicroPhotoService extends Service {
// registerPhotoTimer();
break;
case ACTION_STOP:
- unregisterReceiver(screenactionreceiver);
+ unregisterReceiver(mScreenaAtionReceiver);
stopForeground(true);
stopSelf();
@@ -535,7 +557,7 @@ public class MicroPhotoService extends Service {
public void run() {
Log.d(TAG, "Bluetooth Low Energy device is connected!!");
Toast.makeText(getApplicationContext(), "Connected!", Toast.LENGTH_SHORT).show();
- stateService = STATE_SERVICE.CONNECTED;
+ mStateService = STATE_SERVICE.CONNECTED;
startForeground(NOTIFICATION_ID_FOREGROUND_SERVICE, prepareNotification());
}
}, 10000);
@@ -574,7 +596,7 @@ public class MicroPhotoService extends Service {
remoteViews.setOnClickPendingIntent(R.id.btn_stop, pendingStopIntent);
// if it is connected
- switch (stateService) {
+ switch (mStateService) {
case STATE_SERVICE.NOT_CONNECTED:
remoteViews.setTextViewText(R.id.tv_state, "DISCONNECTED");
break;
@@ -606,7 +628,6 @@ public class MicroPhotoService extends Service {
return notificationBuilder.build();
}
-
public static String buildAppDir(Context contxt) {
File[] paths = contxt.getExternalFilesDirs(null);
@@ -689,6 +710,7 @@ public class MicroPhotoService extends Service {
return false;
}
+
public void downloadAndInstall(final String url) {
final Context context = getApplicationContext();
@@ -737,7 +759,7 @@ public class MicroPhotoService extends Service {
SysApi.reboot(getApplicationContext());
}
};
- handler.postDelayed(runnable, 400);
+ handler.postDelayed(runnable, 1000);
}
public void enableGps(boolean enabled) {
SysApi.enableGps(getApplicationContext(), enabled);
@@ -764,9 +786,7 @@ cellSignalStrengthGsm.getDbm();
protected native boolean fireTimeout(long handler, long uid, long times);
protected native void updatePosition(long handler, double lon, double lat, long ts);
protected native boolean uninit(long handler);
- protected long mHandler = 0;
- private AlarmReceiver alarmReceiver = null;
- private ScreenActionReceiver screenactionreceiver = null;
+
////////////////////////GPS////////////////////
private static final String GPS_LOCATION_NAME = android.location.LocationManager.GPS_PROVIDER;
@@ -817,7 +837,5 @@ cellSignalStrengthGsm.getDbm();
}
};
-
-
////////////////////////GPS////////////////////
}
\ No newline at end of file
diff --git a/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java b/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java
new file mode 100644
index 00000000..face00f4
--- /dev/null
+++ b/app/src/main/java/com/xypower/mpapp/NetworkChangedReceiver.java
@@ -0,0 +1,71 @@
+package com.xypower.mpapp;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.net.wifi.WifiManager;
+import android.os.Parcelable;
+import android.util.Log;
+
+public class NetworkChangedReceiver extends BroadcastReceiver {
+ private String getConnectionType(int type) {
+ String connType = "";
+ if (type == ConnectivityManager.TYPE_MOBILE) {
+ connType = "3G网络数据";
+ } else if (type == ConnectivityManager.TYPE_WIFI) {
+ connType = "WIFI网络";
+ }
+ return connType;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
+ int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
+ Log.e("TAG", "wifiState:" + wifiState);
+ switch (wifiState) {
+ case WifiManager.WIFI_STATE_DISABLED:
+ break;
+ case WifiManager.WIFI_STATE_DISABLING:
+ break;
+ }
+ }
+ // 监听wifi的连接状态即是否连上了一个有效无线路由
+ if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
+ Parcelable parcelableExtra = intent
+ .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
+ if (null != parcelableExtra) {
+ // 获取联网状态的NetWorkInfo对象
+ NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
+ //获取的State对象则代表着连接成功与否等状态
+ NetworkInfo.State state = networkInfo.getState();
+ //判断网络是否已经连接
+ boolean isConnected = state == NetworkInfo.State.CONNECTED;
+ Log.e("TAG", "isConnected:" + isConnected);
+ if (isConnected) {
+ } else {
+
+ }
+ }
+ }
+ // 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听
+ if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
+ //获取联网状态的NetworkInfo对象
+ NetworkInfo info = intent
+ .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
+ if (info != null) {
+ //如果当前的网络连接成功并且网络连接可用
+ if (NetworkInfo.State.CONNECTED == info.getState() && info.isAvailable()) {
+ if (info.getType() == ConnectivityManager.TYPE_WIFI
+ || info.getType() == ConnectivityManager.TYPE_MOBILE) {
+ Log.i("TAG", getConnectionType(info.getType()) + "连上");
+ }
+ } else {
+ Log.i("TAG", getConnectionType(info.getType()) + "断开");
+ }
+ }
+ }
+ }
+}
\ No newline at end of file