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