优化代码,增加网络变化的监控类

serial
Matthew 2 years ago
parent 0659272bf5
commit ff17f26cbd

@ -5,6 +5,8 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
@ -29,8 +31,6 @@
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" tools:ignore="ProtectedPermissions" />
<uses-feature android:name="android.hardware.camera" />
@ -75,6 +75,15 @@
</intent-filter>
</receiver>
<receiver android:name=".NetworkChangedReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
<receiver android:name=".ScreenActionReceiver"
android:exported="true">
<intent-filter android:priority="90000">

@ -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<Long, PendingIntent> 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<String, PowerManager.WakeLock> 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////////////////////
}

@ -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()) + "断开");
}
}
}
}
}
Loading…
Cancel
Save