version:3.1.0

fix:
update:增加远程获取log
This commit is contained in:
2023-09-11 11:49:58 +08:00
parent 935b61c166
commit 94cfe5e6b0
14 changed files with 595 additions and 36 deletions

View File

@@ -73,8 +73,8 @@ android {
official {
flavorDimensions "default"
versionCode 49
versionName "3.0.9"
versionCode 50
versionName "3.1.0"
}
}

View File

@@ -93,7 +93,7 @@
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:name="com.fuying.sn.base.BaseApplication"
android:name=".base.BaseApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
@@ -105,7 +105,7 @@
android:usesCleartextTraffic="true"
tools:replace="android:allowBackup">
<activity
android:name="com.fuying.sn.activity.main.MainActivity"
android:name=".activity.main.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
@@ -115,28 +115,33 @@
</intent-filter>
</activity>
<activity
android:name="com.fuying.sn.activity.SplashActivity"
android:name=".activity.SplashActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait" />
<service
android:name="com.fuying.sn.service.ControlPanelService"
android:name=".service.ControlPanelService"
android:enabled="true"
android:exported="true" />
<service
android:name="com.fuying.sn.service.RemoteService"
android:name=".service.RemoteService"
android:enabled="true"
android:exported="true" />
<service
android:name="com.fuying.sn.service.main.MainService"
android:name=".service.main.MainService"
android:enabled="true"
android:exported="true" />
<service android:name="com.fuying.sn.service.GuardService" />
<service android:name="com.fuying.sn.service.DownloadService" />
<service
android:name="com.fuying.sn.service.StepService"
android:name=".service.LogcatService"
android:enabled="true"
android:exported="true" />
<service android:name=".service.GuardService" />
<service android:name=".service.DownloadService" />
<service
android:name=".service.StepService"
android:exported="true">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.SCREEN_OFF" />
@@ -150,7 +155,7 @@
<data android:scheme="package" />
</intent-filter>
</service>
<service android:name="com.fuying.sn.service.ManagerService">
<service android:name=".service.ManagerService">
<intent-filter android:priority="1000">
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.SCREEN_ON" />
@@ -163,7 +168,7 @@
</service>
<receiver
android:name="com.fuying.sn.receiver.BootReceiver"
android:name=".receiver.BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="1000">
@@ -182,7 +187,7 @@
</intent-filter>
</receiver>
<receiver
android:name="com.fuying.sn.receiver.APKinstallReceiver"
android:name=".receiver.APKinstallReceiver"
android:enabled="true"
android:exported="true"
android:permission="com.example.broadcast.permission">
@@ -195,7 +200,7 @@
</intent-filter>
</receiver>
<receiver
android:name="com.fuying.sn.receiver.InstallResultReceiver"
android:name=".receiver.InstallResultReceiver"
android:enabled="true"
android:exported="true" />
@@ -222,7 +227,7 @@
<!-- 【可选】APP实现的Receiver用于接收消息透传和操作结果的回调请根据需要添加 -->
<!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver -->
<receiver android:name="com.fuying.sn.tpush.MessageReceiver">
<receiver android:name=".tpush.MessageReceiver">
<intent-filter>
<!-- 接收消息透传 -->

View File

@@ -0,0 +1,69 @@
package com.fuying.sn.bean;
import androidx.annotation.NonNull;
import com.google.gson.Gson;
import com.google.gson.JsonParser;
import java.io.Serializable;
public class SnRunLog implements Serializable {
private static final long serialVersionUID = 7780957878619252035L;
int id;
//开始时间
long start_time;
//持续时间
long duration;
//文件大小
int file_max_size;
//上传成功之后是否删除文件
int is_clear;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public long getStart_time() {
return start_time;
}
public void setStart_time(long start_time) {
this.start_time = start_time;
}
public long getDuration() {
return duration;
}
public void setDuration(long duration) {
this.duration = duration;
}
public int getFile_max_size() {
return file_max_size;
}
public void setFile_max_size(int file_max_size) {
this.file_max_size = file_max_size;
}
public int getIs_clear() {
return is_clear;
}
public void setIs_clear(int is_clear) {
this.is_clear = is_clear;
}
@NonNull
@Override
public String toString() {
return JsonParser.parseString(new Gson().toJson(this)).getAsJsonObject().toString();
}
}

View File

@@ -583,17 +583,6 @@ public class RunningAppManager {
boolean havaConfigure = TimeControlManager.getInstance().havaConfigure(pkg);
MachineControl machineControl = TimeControlManager.getInstance().getGlobalMachineControl();
Log.e(TAG, "inControlTime: globalRemainingTime = " + globalRemainingTime);
if (globalRemainingTime <= 0) {
if (machineControl != null) {
if (machineControl.getIs_part() == 0 && machineControl.getIs_quota() == 0) {
return;
}
} else {
ToastUtil.show("今日可使用时间已用完");
return;
}
}
if (havaConfigure) {
AppTimeControl appTimeControl = TimeControlManager.getInstance().getAppTimeControl(pkg);
//全局配置的
@@ -615,6 +604,19 @@ public class RunningAppManager {
} else {
mGlobalUsageTime.remove(pkg);
}
Log.e(TAG, "inControlTime: globalRemainingTime = " + globalRemainingTime);
if (globalRemainingTime <= 0) {
if (machineControl != null) {
if (machineControl.getIs_part() == 0 && machineControl.getIs_quota() == 0) {
return;
}
} else {
ToastUtil.show("今日可使用时间已用完");
return;
}
}
//单个app的
AppUsageTime singleAppUsageTime;
if (mAllAppUsageTime.get(pkg) == null) {
@@ -646,6 +648,17 @@ public class RunningAppManager {
if (machineControl == null) {
return;
}
Log.e(TAG, "inControlTime: globalRemainingTime = " + globalRemainingTime);
if (globalRemainingTime <= 0) {
if (machineControl != null) {
if (machineControl.getIs_part() == 0 && machineControl.getIs_quota() == 0) {
return;
}
} else {
ToastUtil.show("今日可使用时间已用完");
return;
}
}
Log.i(TAG, "reduceAppRemainingTime: " + machineControl.getToday_time());
long remainingTime = machineControl.getToday_time() - time;
if (remainingTime < 0) {

View File

@@ -1,6 +1,8 @@
package com.fuying.sn.network;
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
@@ -31,6 +33,7 @@ import com.fuying.sn.bean.OverallAppBean;
import com.fuying.sn.bean.ScreenPassword;
import com.fuying.sn.bean.SnBindState;
import com.fuying.sn.bean.SnInfo;
import com.fuying.sn.bean.SnRunLog;
import com.fuying.sn.bean.SystemSettingsSet;
import com.fuying.sn.bean.UserAvatarInfo;
import com.fuying.sn.bean.browser.BrowserApiData;
@@ -61,6 +64,8 @@ import com.fuying.sn.network.api.GetControlScreenshotApi;
import com.fuying.sn.network.api.GetGuideApi;
import com.fuying.sn.network.api.GetLockScreenPwdApi;
import com.fuying.sn.network.api.GetPublicIPApi;
import com.fuying.sn.network.api.GetSnRunLogApi;
import com.fuying.sn.network.api.GetUploadLogApi;
import com.fuying.sn.network.api.MachineTimeControlApi;
import com.fuying.sn.network.api.MyAppListApi;
import com.fuying.sn.network.api.NewestAppUpdate;
@@ -81,6 +86,7 @@ import com.fuying.sn.network.api.UpdateLockScreen;
import com.fuying.sn.network.api.UploadScreenshot;
import com.fuying.sn.network.api.UserInfoControl;
import com.fuying.sn.network.interceptor.RepeatRequestInterceptor;
import com.fuying.sn.service.LogcatService;
import com.fuying.sn.utils.ApkUtils;
import com.fuying.sn.utils.AppUsedTimeUtils;
import com.fuying.sn.utils.CmdUtil;
@@ -222,6 +228,10 @@ public class NetInterfaceManager {
return okHttpClient;
}
public GetUploadLogApi getUploadLogApi() {
return mRetrofit.create(GetUploadLogApi.class);
}
/*
*
* Observable
@@ -464,6 +474,13 @@ public class NetInterfaceManager {
.observeOn(AndroidSchedulers.mainThread());
}
public Observable<BaseResponse<SnRunLog>> getSnRunLogControl() {
return mRetrofit.create(GetSnRunLogApi.class)
.getSnRunLog(Utils.getSerial())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/*
*
* execution
@@ -3015,4 +3032,61 @@ public class NetInterfaceManager {
}
};
}
private static final int REQUEST_CODE = 12345;
public void getRunLog() {
getSnRunLogControl()
.subscribe(new Observer<BaseResponse<SnRunLog>>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("getRunLog", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse<SnRunLog> snRunLogBaseResponse) {
Log.e("getRunLog", "onNext: " + snRunLogBaseResponse);
if (snRunLogBaseResponse.code == 200) {
SnRunLog snRunLog = snRunLogBaseResponse.data;
LogcatService.setStart_Time(snRunLog.getStart_time());
LogcatService.setDuration(snRunLog.getDuration());
LogcatService.setFileMaxSize(snRunLog.getFile_max_size());
LogcatService.setClearFile(snRunLog.getIs_clear());
long timestamp = snRunLog.getStart_time() * 1000;
long nowTime = System.currentTimeMillis();
AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
if (nowTime > timestamp) {
Intent intent = new Intent(LogcatService.LOGCAT_START_ACTION);
mContext.sendBroadcast(intent);
} else {
Intent intent = new Intent(LogcatService.LOGCAT_START_ACTION);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(mContext,
REQUEST_CODE, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
timestamp, startPendingIntent);
}
Intent intent = new Intent(LogcatService.LOGCAT_STOP_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext,
REQUEST_CODE, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,
timestamp + snRunLog.getDuration() * 1000, pendingIntent);
}
}
@Override
public void onError(Throwable e) {
Log.e("getRunLog", "onError: " + e.getMessage());
onComplete();
}
@Override
public void onComplete() {
Log.e("getRunLog", "onComplete: ");
}
});
}
}

View File

@@ -81,6 +81,16 @@ public class UrlAddress {
/*解除锁屏*/
public static final String UPDATE_LOCK_SCREEN = "sn/updateLockScreen";
/**
* log相关
*/
/*获取log任务*/
public static final String GET_LOG_ORDER = "sn/getSnRunLog";
/*上传log文件*/
public static final String UPLOAD_LOG_FILE = "sn/uploadLogFile";
/*上传运行日志设置文件*/
public static final String UPLOAD_IS_LOG_FILE = "sn/uploadIsLogFile";
/*获取公网IP*/

View File

@@ -0,0 +1,16 @@
package com.fuying.sn.network.api;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.bean.SnRunLog;
import com.fuying.sn.network.UrlAddress;
import io.reactivex.rxjava3.core.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
public interface GetSnRunLogApi {
@GET(UrlAddress.GET_LOG_ORDER)
Observable<BaseResponse<SnRunLog>> getSnRunLog(
@Query("sn") String sn
);
}

View File

@@ -0,0 +1,22 @@
package com.fuying.sn.network.api;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.network.UrlAddress;
import java.util.Map;
import io.reactivex.rxjava3.core.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.QueryMap;
public interface GetUploadLogApi {
@Multipart
@POST(UrlAddress.UPLOAD_LOG_FILE)
Observable<BaseResponse> UploadLog(
@QueryMap Map<String, String> params,
@Part MultipartBody.Part body
);
}

View File

@@ -33,7 +33,7 @@ public class GuardService extends Service {
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.e(TAG, "GuardService:建立链接");
boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(GuardService.this, getClass().getName());
boolean isServiceRunning = ServiceAliveUtils.isServiceAlive(GuardService.this, getClass().getName());
if (!isServiceRunning) {
Intent i = new Intent(GuardService.this, DownloadService.class);
startService(i);

View File

@@ -0,0 +1,339 @@
package com.fuying.sn.service;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.text.TextUtils;
import android.util.Log;
import com.fuying.sn.bean.BaseResponse;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.utils.Utils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
public class LogcatService extends Service {
public final static String LOGCAT_START_ACTION = "START";
public final static String LOGCAT_STOP_ACTION = "STOP";
private String TAG = LogcatService.class.getSimpleName();
public LogcatService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
logFilePath = getExternalCacheDir() + File.separator + "LOG" + File.separator;
File file = new File(logFilePath);
if (!file.exists()) {
file.mkdirs();
}
// try {
// exec = Runtime.getRuntime().exec(running);
// final InputStream is = exec.getInputStream();
// logThread = new LogThread(is);
// logThread.start();
// // is.close();
//// exec.destroy();
// } catch (IOException e) {
//// e.printStackTrace();
// Log.e("第一个是Logcat", e.getMessage());
// }
registerLogcatReceiver();
}
private static long start_Time;
private static long condition_duration;
private static long condition_file_max_size;
private static boolean clear_file;
public static void setStart_Time(long start_Time) {
LogcatService.start_Time = start_Time;
}
public static void setDuration(long duration) {
condition_duration = duration;
}
public static void setFileMaxSize(long fileMaxSize) {
condition_file_max_size = fileMaxSize * 1024 * 1024;
}
public static void setClearFile(int clearfile) {
clear_file = clearfile == 1;
}
LogcatReceiver receiver;
private void registerLogcatReceiver() {
receiver = new LogcatReceiver();
IntentFilter filter = new IntentFilter();
filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
filter.addAction(LOGCAT_START_ACTION);
filter.addAction(LOGCAT_STOP_ACTION);
registerReceiver(receiver, filter);
}
Thread thread = null;
private void creatLogThread() {
if (thread == null) {
thread = new Thread(LogcatRunnale);
}
}
private void startLogThread() {
if (thread == null) {
creatLogThread();
shouldGetLog = true;
thread.start();
} else {
//已经有线程正在运行了
}
}
private void stopLogThread() {
if (thread != null) {
shouldGetLog = false;
thread = null;
//清除adb 缓存
try {
Runtime.getRuntime().exec(clearLogcat);
} catch (IOException e) {
e.printStackTrace();
}
}
uploadFile();
}
private Process exec;
private LogThread logThread;
//第一个是Logcat 也就是我们想要获取的log日志
//第二个是 -s 也就是表示过滤的意思
//第三个就是 我们要过滤的类型 W表示warm ,我们也可以换成 D debug IinfoEerror等等
// String[] running = new String[]{"logcat", "-s", "adb logcat *: W"};
String[] running = new String[]{"logcat"};
String clearLogcat = "logcat -c";
String logFilePath;
//= getExternalCacheDir() + File.separator + "LOG" + File.separator;
String logFileName;
String tempFilePath;
class LogThread extends Thread {
InputStream is;
LogThread(InputStream inputStream) {
super();
this.is = inputStream;
}
@Override
public void run() {
FileOutputStream os = null;
try {
//新建一个路径信息
File file = new File(logFilePath + logFileName);
Log.e(TAG, "run: " + logFilePath);
if (!file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
os = new FileOutputStream(logFilePath);
int len = 0;
byte[] buf = new byte[1024];
while (-1 != (len = is.read(buf))) {
os.write(buf, 0, len);
os.flush();
}
} catch (Exception e) {
Log.e("writelog", "read logcat process failed. message: "
+ e.getMessage());
} finally {
if (null != os) {
try {
os.close();
os = null;
} catch (IOException e) {
// Do nothing
}
}
}
}
}
private Runnable LogcatRunnale = this::getLog;
public static boolean shouldGetLog = true;
private void getLog() {
Process process = null;
try {
process = Runtime.getRuntime().exec(running);
} catch (IOException e) {
e.printStackTrace();
}
InputStreamReader inputStreamReader;
BufferedReader bufferedReader;
FileOutputStream fileOutputStream;
File file = new File(logFilePath);
Log.e(TAG, "getLog: " + logFilePath);
if (!file.exists()) {
file.mkdirs();
}
if (clear_file) {
logFileName = Utils.getSerial() + ".log";
} else {
logFileName = Utils.getSerial() + "-" + getTime() + ".log";
}
try {
inputStreamReader = new InputStreamReader(process.getInputStream());
bufferedReader = new BufferedReader(inputStreamReader);
tempFilePath = logFilePath + logFileName;
fileOutputStream = new FileOutputStream(tempFilePath);
Log.e(TAG, "getLog: " + tempFilePath);
long fileSize = file.length();
String logEntry;
while (shouldGetLog) {
logEntry = bufferedReader.readLine() + "\n";
fileOutputStream.write(logEntry.getBytes());
fileOutputStream.flush();
fileSize += logEntry.length();
// Log.e(TAG, "getLog: " + fileSize);
if (fileSize >= condition_file_max_size ||
(start_Time + condition_duration) * 1000 < System.currentTimeMillis()) {
shouldGetLog = false;
stopLogThread();
}
}
inputStreamReader.close();
bufferedReader.close();
fileOutputStream.close();
Log.e(TAG, "getLog: " + "closed");
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
private void uploadFile() {
File file = new File(tempFilePath);
if (!file.exists() || file.isDirectory()) {
Log.e("uploadFile", "File does not exists");
return;
}
Map<String, String> params = new HashMap<>();
params.put("sn", Utils.getSerial());
MediaType mediaType = MediaType.Companion.parse("text/html");
RequestBody fileBody = RequestBody.Companion.create(file, mediaType);
//设置一个file文件
MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), fileBody);
NetInterfaceManager.getInstance().getUploadLogApi()
.UploadLog(params, body)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseResponse>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("uploadFile", "onSubscribe: ");
}
@Override
public void onNext(BaseResponse snRunLogBaseResponse) {
Log.e("uploadFile", "onNext: " + snRunLogBaseResponse);
}
@Override
public void onError(Throwable e) {
Log.e("uploadFile", "onError: " + e.getMessage());
}
@Override
public void onComplete() {
Log.e("uploadFile", "onComplete: ");
if (clear_file) {
file.delete();
}
}
});
}
class LogcatReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.e(TAG, "onReceive: " + action);
if (TextUtils.isEmpty(action)) {
return;
}
switch (action) {
case LOGCAT_START_ACTION:
Log.e(TAG, "onReceive: "+"开始录制log");
startLogThread();
break;
case LOGCAT_STOP_ACTION:
Log.e(TAG, "onReceive: "+"停止录制log");
stopLogThread();
break;
default:
break;
}
}
}
public static String getTime() {
long time = System.currentTimeMillis();//long now = android.os.SystemClock.uptimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
Date d1 = new Date(time);
String t1 = format.format(d1);
return t1;
}
@Override
public void onDestroy() {
super.onDestroy();
if (receiver != null) {
unregisterReceiver(receiver);
}
}
}

View File

@@ -70,7 +70,7 @@ public class StepService extends Service implements NetworkUtils.OnNetworkStatus
@Override
public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
Log.w(TAG, "StepService:建立链接");
boolean isServiceRunning = ServiceAliveUtils.isServiceAlice(StepService.this, GuardService.class.getName());
boolean isServiceRunning = ServiceAliveUtils.isServiceAlive(StepService.this, GuardService.class.getName());
if (!isServiceRunning) {
Intent i = new Intent(StepService.this, GuardService.class);
startService(i);

View File

@@ -370,7 +370,7 @@ public class MainSPresenter implements MainSContact.Presenter {
if (code == 200) {
JsonObject jsonObject = GsonUtils.getJsonObject(GsonUtils.toJSONString(baseResponse.data));
int is_screen_lock = jsonObject.get("is_screen_lock").getAsInt();
if (!ServiceAliveUtils.isServiceAlice(mContext, ManagerService.class.getName())) {
if (!ServiceAliveUtils.isServiceAlive(mContext, ManagerService.class.getName())) {
mContext.startService(new Intent(mContext, ManagerService.class));
}
SPUtils.put(mContext, ManagerService.LOCK_STATE, is_screen_lock);

View File

@@ -32,6 +32,7 @@ import com.fuying.sn.manager.ControlManager;
import com.fuying.sn.manager.DeviceManager;
import com.fuying.sn.network.NetInterfaceManager;
import com.fuying.sn.receiver.BootReceiver;
import com.fuying.sn.service.LogcatService;
import com.fuying.sn.service.ManagerService;
import com.fuying.sn.tpush.common.NotificationService;
import com.fuying.sn.tpush.po.XGNotification;
@@ -481,6 +482,8 @@ public class MessageReceiver extends XGPushBaseReceiver {
private static final String ACTION_APP_CONTROL = "81";
/*更新白名单*/
private static final String UPDATE_WHITE_LIST = "83";
/*远程log*/
private static final String SN_RUN_LOG = "84";
/*一键断网*/
private static final String ACTION_DISABLE_NETWORK = "85";
@@ -794,6 +797,9 @@ public class MessageReceiver extends XGPushBaseReceiver {
case UPDATE_WHITE_LIST:
NetInterfaceManager.getInstance().getAllappPackage();
break;
case SN_RUN_LOG:
recordLog(extras);
break;
case ACTION_DISABLE_NETWORK:
ToastUtil.debugShow("收到推送消息: 一键断网");
oneKeyNetwork(context, extras);
@@ -1246,7 +1252,7 @@ public class MessageReceiver extends XGPushBaseReceiver {
JsonObject jSONObject = GsonUtils.getJsonObject(jsonString);
type = jSONObject.get("type").getAsInt();
if (!ServiceAliveUtils.isServiceAlice(context, ManagerService.class.getName())) {
if (!ServiceAliveUtils.isServiceAlive(context, ManagerService.class.getName())) {
context.startService(new Intent(context, ManagerService.class));
}
Intent intent = new Intent();
@@ -1572,5 +1578,10 @@ public class MessageReceiver extends XGPushBaseReceiver {
}
}
private void recordLog(String jsonString) {
if (!ServiceAliveUtils.isServiceAlive(mContext, LogcatService.class.getName())) {
mContext.startService(new Intent(mContext, LogcatService.class));
}
NetInterfaceManager.getInstance().getRunLog();
}
}

View File

@@ -6,19 +6,19 @@ import android.util.Log;
public class ServiceAliveUtils {
public static boolean isServiceAlice(Context context,String className) {
public static boolean isServiceAlive(Context mContext, String serviceName) {
boolean isServiceRunning = false;
ActivityManager manager =
(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
(ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
if (manager == null) {
return false;
}
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (className.equals(service.service.getClassName())) {
if (serviceName.equals(service.service.getClassName())) {
isServiceRunning = true;
}
}
Log.e("ServiceAliveUtils", "className isServiceAlice: " + isServiceRunning);
Log.i("ServiceAliveUtils", serviceName + " :isServiceAlive: " + isServiceRunning);
return isServiceRunning;
}
}