diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 32347289..ecfe7e9f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -52,11 +52,13 @@
android:exported="true"
>
+
+
@@ -68,10 +70,14 @@
-
-
-
-
+
+
+
+
+
diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt
index 7e19c71f..ecb7ddc6 100644
--- a/app/src/main/cpp/CMakeLists.txt
+++ b/app/src/main/cpp/CMakeLists.txt
@@ -290,6 +290,7 @@ add_library( # Sets the name of the library.
${TERM_CORE_ROOT}/SpecData_I1_SHX.cpp
${TERM_CORE_ROOT}/SpecData_XY.cpp
${TERM_CORE_ROOT}/SpecData_ZJ.cpp
+ ${TERM_CORE_ROOT}/SpecData_NW.cpp
${TERM_CORE_ROOT}/Timer.cpp
${TERM_CORE_ROOT}/TimerThread.cpp
${TERM_CORE_ROOT}/Template.cpp
@@ -302,6 +303,7 @@ add_library( # Sets the name of the library.
${TERM_CORE_ROOT}/Client/Terminal_HEN.cpp
${TERM_CORE_ROOT}/Client/Terminal_SHX.cpp
${TERM_CORE_ROOT}/Client/Terminal_JS.cpp
+ ${TERM_CORE_ROOT}/Client/Terminal_NW.cpp
${TERM_CORE_ROOT}/Client/UpgradeReceiver.cpp
)
diff --git a/app/src/main/cpp/PhoneDevice.cpp b/app/src/main/cpp/PhoneDevice.cpp
index b4c2fafa..3619d161 100644
--- a/app/src/main/cpp/PhoneDevice.cpp
+++ b/app/src/main/cpp/PhoneDevice.cpp
@@ -136,7 +136,7 @@ static inline uint32_t YUV2RGB(int nY, int nU, int nV) {
return 0xff000000 | (nR << 16) | (nG << 8) | nB;
}
-CPhoneDevice::CPhoneCamera::CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height) : NdkCamera(width, height), m_dev(dev)
+CPhoneDevice::CPhoneCamera::CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height, const NdkCamera::CAMERA_PARAMS& params) : NdkCamera(width, height, params), m_dev(dev)
{
}
@@ -606,8 +606,16 @@ bool CPhoneDevice::TakePhoto(const IDevice::PHOTO_INFO& photoInfo, const vector<
mPath = path;
mOsds = osds;
- mCamera = new CPhoneCamera(this, photoInfo.width, photoInfo.height);
- if (mCamera->open(to_string(photoInfo.channel - 1).c_str()) == 0)
+ NdkCamera::CAMERA_PARAMS params;
+ params.hdrMode = mPhotoInfo.hdrMode;
+ params.nightMode = mPhotoInfo.nightMode;
+ params.autoFocus = mPhotoInfo.autoFocus;
+ params.autoExposure = mPhotoInfo.autoExposure;
+ params.exposureTime = mPhotoInfo.exposureTime;
+ params.sensibility = mPhotoInfo.sensibility;
+
+ mCamera = new CPhoneCamera(this, photoInfo.width, photoInfo.height, params);
+ if (mCamera->open(to_string(mPhotoInfo.cameraId).c_str()) == 0)
{
}
else
@@ -654,7 +662,7 @@ bool CPhoneDevice::OnImageReady(const cv::Mat& mat)
int thickness2 = 1 * ratio;
if (thickness2 == 0) thickness2 = 1;
- int thickness1 = thickness2 + 3;
+ int thickness1 = thickness2 + 2;
cv::Scalar scalar1(0, 0, 0); // black
cv::Scalar scalar2(255, 255, 255); // white
@@ -666,8 +674,8 @@ bool CPhoneDevice::OnImageReady(const cv::Mat& mat)
{
continue;
}
- textSize = cv::getTextSize(it->text, cv::FONT_HERSHEY_SIMPLEX, fontScale, thickness1, &baseline);
- textSize2 = cv::getTextSize(it->text, cv::FONT_HERSHEY_SIMPLEX, fontScale, thickness2, &baseline);
+ textSize = cv::getTextSize(it->text, cv::FONT_HERSHEY_TRIPLEX, fontScale, thickness1, &baseline);
+ textSize2 = cv::getTextSize(it->text, cv::FONT_HERSHEY_TRIPLEX, fontScale, thickness2, &baseline);
if (it->alignment == OSD_ALIGNMENT_TOP_LEFT)
{
@@ -700,8 +708,8 @@ bool CPhoneDevice::OnImageReady(const cv::Mat& mat)
ALOGE("putText: fontScale=%f w1=%d w2=%d tn=%d/%d", fontScale, textSize.width, textSize2.width, thickness1, thickness2);
- cv::putText(mat, it->text, pt1, cv::FONT_HERSHEY_COMPLEX, fontScale, scalar1, thickness1,cv::LINE_AA);
- cv::putText(mat, it->text, pt1, cv::FONT_HERSHEY_COMPLEX, fontScale, scalar2, thickness2,cv::LINE_AA);
+ cv::putText(mat, it->text, pt1, cv::FONT_HERSHEY_TRIPLEX, fontScale, scalar1, thickness1,cv::LINE_AA);
+ cv::putText(mat, it->text, pt1, cv::FONT_HERSHEY_TRIPLEX, fontScale, scalar2, thickness2,cv::LINE_AA);
}
diff --git a/app/src/main/cpp/PhoneDevice.h b/app/src/main/cpp/PhoneDevice.h
index f62f1d99..62418bba 100644
--- a/app/src/main/cpp/PhoneDevice.h
+++ b/app/src/main/cpp/PhoneDevice.h
@@ -31,7 +31,7 @@ public:
class CPhoneCamera : public NdkCamera {
public:
- CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height);
+ CPhoneCamera(CPhoneDevice* dev, int32_t width, int32_t height, const NdkCamera::CAMERA_PARAMS& params);
virtual bool on_image(const cv::Mat& rgb);
virtual void on_error(const std::string& msg);
diff --git a/app/src/main/cpp/camera2/ndkcamera.cpp b/app/src/main/cpp/camera2/ndkcamera.cpp
index 0a701e4a..b75c70b5 100644
--- a/app/src/main/cpp/camera2/ndkcamera.cpp
+++ b/app/src/main/cpp/camera2/ndkcamera.cpp
@@ -74,11 +74,12 @@ void onCaptureCompleted(void* context, ACameraCaptureSession* session, ACaptureR
((NdkCamera*)context)->onCaptureCompleted(session, request, result);
}
-NdkCamera::NdkCamera(int32_t width, int32_t height)
+NdkCamera::NdkCamera(int32_t width, int32_t height, const NdkCamera::CAMERA_PARAMS& params)
{
camera_facing = 0;
camera_orientation = 0;
+ m_params = params;
m_firstFrame = true;
mWidth = width;
mHeight = height;
@@ -344,50 +345,57 @@ int NdkCamera::open(const char* cameraId) {
int32_t fpsRange[2] = {10,30};
res = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_CONTROL_AE_TARGET_FPS_RANGE,2,fpsRange);
- bool usingAE = true;
-
- if (usingAE) {
+ if (m_params.autoExposure) {
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_ON;
res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
// ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity_);
-
uint8_t aeLockOff = ACAMERA_CONTROL_AE_LOCK_OFF;
// ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_LOCK, 1, &aeLockOff);
} else {
uint8_t aeMode = ACAMERA_CONTROL_AE_MODE_OFF;
res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AE_MODE, 1, &aeMode);
- uint8_t hdrMode = ACAMERA_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10; // ACAMERA_CONTROL_SCENE_MODE_HDR
- res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_HDR, 1, &hdrMode);
-
- int32_t sensitivity = sensitivityRange.value(2);
- res = ACaptureRequest_setEntry_i32(capture_request,ACAMERA_SENSOR_SENSITIVITY, 1, &sensitivity);
- int64_t exposureTime = exposureRange.value(5);
- res = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1, &exposureTime);
+ if (hdrSupported && m_params.hdrMode) {
+ uint8_t hdrMode = ACAMERA_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10; // ACAMERA_CONTROL_SCENE_MODE_HDR
+ // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_HDR, 1,&hdrMode);
+ }
+ if (m_params.sensibility > 0) {
+ int32_t sensitivity = m_params.sensibility;
+ res = ACaptureRequest_setEntry_i32(capture_request, ACAMERA_SENSOR_SENSITIVITY, 1,
+ &sensitivity);
+ }
+ if (m_params.exposureTime > 0) {
+ int64_t exposureTime = m_params.exposureTime * 1000000;
+ res = ACaptureRequest_setEntry_i64(capture_request, ACAMERA_SENSOR_EXPOSURE_TIME, 1,
+ &exposureTime);
+ }
}
- // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO;
- uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE;
- res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
+ if (afSupported && m_params.autoFocus) {
+ // uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_VIDEO;
+ uint8_t afMode = ACAMERA_CONTROL_AF_MODE_CONTINUOUS_PICTURE;
+ res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AF_MODE, 1, &afMode);
+ }
uint8_t awbMode = ACAMERA_CONTROL_AWB_MODE_AUTO;
// res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_AWB_MODE, 1, &awbMode);
- if (hdrSupported) {
+ if (hdrSupported && m_params.hdrMode) {
+ // uint8_t hdrMode = ACAMERA_REQUEST_AVAILABLE_DYNAMIC_RANGE_PROFILES_MAP_HDR10; // ACAMERA_CONTROL_SCENE_MODE_HDR
uint8_t hdrMode = ACAMERA_CONTROL_SCENE_MODE_HDR; // ACAMERA_CONTROL_SCENE_MODE_HDR
- // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_HDR, 1, &hdrMode);
- res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE, 1, &hdrMode);
-
+ res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_HDR, 1,&hdrMode);
}
- if (nightModeSupported) {
- uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
- // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT, 1, &modeEnabled);
- }
- if (nightPortraitModeSupported) {
- uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
- // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT_PORTRAIT, 1, &modeEnabled);
+ if (m_params.nightMode) {
+ if (nightModeSupported) {
+ uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
+ // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT, 1, &modeEnabled);
+ }
+ if (nightPortraitModeSupported) {
+ uint8_t modeEnabled = 1; // ACAMERA_CONTROL_SCENE_MODE_HDR
+ // res = ACaptureRequest_setEntry_u8(capture_request, ACAMERA_CONTROL_SCENE_MODE_NIGHT_PORTRAIT, 1, &modeEnabled);
+ }
}
res = ACameraOutputTarget_create(image_reader_surface, &image_reader_target);
@@ -622,7 +630,6 @@ void NdkCamera::on_image(const unsigned char* nv21, int nv21_width, int nv21_hei
rotate_type = camera_facing == 0 ? 7 : 8;
}
-
cv::Mat nv21_rotated(h + h / 2, w, CV_8UC1);
ncnn::kanna_rotate_yuv420sp(nv21, nv21_width, nv21_height, nv21_rotated.data, w, h, rotate_type);
diff --git a/app/src/main/cpp/camera2/ndkcamera.h b/app/src/main/cpp/camera2/ndkcamera.h
index 5965bb90..e9fabc3b 100644
--- a/app/src/main/cpp/camera2/ndkcamera.h
+++ b/app/src/main/cpp/camera2/ndkcamera.h
@@ -37,8 +37,16 @@ class NdkCamera
{
public:
-
- NdkCamera(int32_t width, int32_t height);
+ struct CAMERA_PARAMS {
+ unsigned int hdrMode : 1;
+ unsigned int nightMode : 1;
+ unsigned int autoFocus : 1;
+ unsigned int autoExposure : 1;
+ unsigned int exposureTime; // ms
+ unsigned int sensibility;
+ };
+
+ NdkCamera(int32_t width, int32_t height, const CAMERA_PARAMS& params);
virtual ~NdkCamera();
// facing 0=front 1=back
@@ -55,6 +63,7 @@ public:
public:
+ CAMERA_PARAMS m_params;
int camera_facing;
int camera_orientation;
bool m_firstFrame;
diff --git a/app/src/main/java/com/xypower/mpapp/AlarmUtil.java b/app/src/main/java/com/xypower/mpapp/AlarmUtil.java
new file mode 100644
index 00000000..3b666446
--- /dev/null
+++ b/app/src/main/java/com/xypower/mpapp/AlarmUtil.java
@@ -0,0 +1,93 @@
+package com.xypower.mpapp;
+
+import static android.content.Context.ALARM_SERVICE;
+
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.text.format.DateFormat;
+import android.util.Log;
+
+import java.util.Date;
+import java.util.List;
+
+public class AlarmUtil {
+
+ public final static String TAG = "MPLOG";
+ public final static long MASK_CHANNEL = 0xFF00L;
+ public final static long MASK_PRESET = 0xFF0000L;
+ public final static long MASK_SCHEDULE_TIME = 0xFFFFFF000000L;
+
+ public final static int SHIFT_CHANNEL = 8;
+ public final static int SHIFT_PRESET = 16;
+ public final static int SHIFT_SCHEDULE_TIME = 24;
+
+ private static final String ACTION_TAKE_PHOTO = "ACT_TP";
+
+ private static final String EXTRA_PARAM_CHANNEL = "Channel";
+ private static final String EXTRA_PARAM_PRESET = "Preset";
+ private static final String EXTRA_PARAM_PHOTO_OR_VIDEO = "PhotoOrVideo";
+ private static final String EXTRA_PARAM_SCHEDULES = "Schedules";
+ private static final String EXTRA_PARAM_SCHEDULE = "Schedule_";
+
+ private static final String EXTRA_PARAM_TIME = "Time";
+
+ public static void registerPhotoTimer(Context context, int channel, int preset, long ts, long timeout, List schedules) {
+
+ // 创建延迟意图
+ Intent alarmIntent = new Intent();
+ alarmIntent.setAction(ACTION_TAKE_PHOTO);
+ int cnt = schedules.size();
+ alarmIntent.putExtra(EXTRA_PARAM_SCHEDULES, cnt);
+ String channelStr = "";
+ for (int idx = 0; idx < cnt; idx++) {
+ long val = schedules.get(idx).longValue();
+ alarmIntent.putExtra(EXTRA_PARAM_SCHEDULE + idx, schedules.get(idx).longValue());
+ channelStr += "CH=" + ((val & 0XFF0000) >> 16) + "-PR=" + ((val & 0XFF00) >> 8) + " ";
+ }
+
+ alarmIntent.putExtra(EXTRA_PARAM_TIME, ts);
+
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
+
+ long currentTimeMillis = System.currentTimeMillis();
+ Date date = new Date(currentTimeMillis + timeout);
+ String dateStr = (String) DateFormat.format("MM-dd kk:mm:ss", date);
+ Log.d(TAG, "PhotoTimer Reg: " + dateStr + " currentTimeMillis=" + currentTimeMillis + " timeout=" + timeout + " Channels=" + channelStr);
+
+ alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeout, pendingIntent);
+ }
+
+ public static boolean parseTakingPhotoAlarm(Intent intent) {
+
+ long ts = intent.getLongExtra(EXTRA_PARAM_TIME, 0);
+ int cnt = intent.getIntExtra(EXTRA_PARAM_SCHEDULES, 0);
+ if (cnt > 0) {
+ for (int idx = 0; idx < cnt; idx++) {
+ long val = intent.getLongExtra(EXTRA_PARAM_SCHEDULE + idx, 0);
+
+ int channel = (int) ((val & 0xFF0000L) >> 16);
+ int preset = (int) ((val & 0xFF00L) >> 8);
+
+ Log.i(TAG, "PhotoTimer Fired: CH=" + channel + " PR=" + preset);
+ // mService.notifyToTakePhoto(mService.mNativeHandle, channel, preset, ts, mService.buildPhotoDir(mService.getApplicationContext(), channel), mService.buildPhotoFileName(channel, preset, ts), true);
+ }
+ }
+
+ // Register Next Photo Timer
+ Date date = new Date();
+ long nowTs = date.getTime() / 1000;
+ date.setHours(0);
+ date.setMinutes(0);
+ date.setSeconds(0);
+ long startTime = date.getTime() / 1000;
+ long baseTime = nowTs - startTime;
+
+ return true;
+ }
+
+
+}
diff --git a/app/src/main/java/com/xypower/mpapp/BootBroadcastReceiver.java b/app/src/main/java/com/xypower/mpapp/BootBroadcastReceiver.java
index 6c0adede..6ead8443 100644
--- a/app/src/main/java/com/xypower/mpapp/BootBroadcastReceiver.java
+++ b/app/src/main/java/com/xypower/mpapp/BootBroadcastReceiver.java
@@ -11,13 +11,11 @@ public class BootBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
- // Log.e("接收广播", "onReceive: ");
- // Log.e("接收广播", "onReceive: " + intent.getAction());
- //开机启动
+
+ Log.i("BootBroadcastReceiver", intent.getAction());
+
if (ACTION.equals(intent.getAction())) {
- // Log.e("接收广播", "onReceive: 启动了。。。");
- Log.i("BootBroadcastReceiver", "Start MainActivity");
/*
Intent mainIntent = new Intent(context, MainActivity.class);
@@ -31,6 +29,10 @@ public class BootBroadcastReceiver extends BroadcastReceiver {
}
*/
+ MainActivity.AppConfig appConfig = MainActivity.getAppConfig(context);
+
+ MainActivity.startMicroPhotoService(context, appConfig);
+ /*
Intent mainIntent = new Intent(context, MainActivity.class);
mainIntent.putExtra("reboot", 1);
//Intent.FLAG_ACTIVITY_NEW_TASK
@@ -38,7 +40,7 @@ public class BootBroadcastReceiver extends BroadcastReceiver {
mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(mainIntent);
-// context.startService(mainIntent);
+ */
}
}
}
diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java
index 98a22d5d..a35d6ae9 100644
--- a/app/src/main/java/com/xypower/mpapp/MainActivity.java
+++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java
@@ -113,15 +113,8 @@ public class MainActivity extends AppCompatActivity {
}
- @Override
- protected void onDestroy() {
- if (mLogFileObserver != null) {
- mLogFileObserver.stopWatching();
- }
- super.onDestroy();
- }
- protected class AppConfig {
+ public static class AppConfig {
public String cmdid;
public String server;
public int port;
@@ -144,7 +137,7 @@ public class MainActivity extends AppCompatActivity {
binding.logs.setText("");
binding.logs.setMovementMethod(ScrollingMovementMethod.getInstance());
binding.logs.setScrollbarFadingEnabled(false);
-
+ // binding.logs.setMaxLines(16);
mHandler = new Handler(Looper.myLooper()) {
@Override
@@ -200,11 +193,6 @@ public class MainActivity extends AppCompatActivity {
};
mMessenger = new Messenger(new Handler());
- String logFilePath = MicroPhotoService.buildAppDir(this.getApplicationContext());
- logFilePath += "logs/log.txt";
- mLogFileObserver = new LogFileObserver(logFilePath);
- mLogFileObserver.startWatching();
-
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
Display defaultDisplay = windowManager.getDefaultDisplay();
int width = defaultDisplay.getWidth();
@@ -260,29 +248,9 @@ public class MainActivity extends AppCompatActivity {
return;
}
- int channel = 2;
- String path = buildPhotoDir(channel);
- String fileName = buildPhotoFileName(channel, 255);
-
AppConfig curAppConfig = retrieveAndSaveAppConfig();
- if (TextUtils.isEmpty(curAppConfig.cmdid) || TextUtils.isEmpty(curAppConfig.server) || curAppConfig.port == 0) {
- return;
- }
- Intent intent = new Intent(MainActivity.this, MicroPhotoService.class);
- intent.setAction(MicroPhotoService.ACTION_START);
- intent.putExtra("cmdid", curAppConfig.cmdid);
- intent.putExtra("server", curAppConfig.server);
- intent.putExtra("port", curAppConfig.port);
- intent.putExtra("protocol", curAppConfig.protocol);
- intent.putExtra("networkProtocol", curAppConfig.networkProtocol);
- intent.putExtra("messenger", mMessenger);
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- MainActivity.this.startForegroundService(intent);
- } else {
- MainActivity.this.startService(intent);
- }
+ startMicroPhotoService(MainActivity.this, appConfig);
binding.startServBtn.setEnabled(false);
binding.stopServBtn.setEnabled(true);
@@ -478,6 +446,57 @@ public class MainActivity extends AppCompatActivity {
}
+ public static void startMicroPhotoService(Context context, AppConfig curAppConfig) {
+
+ if (TextUtils.isEmpty(curAppConfig.cmdid) || TextUtils.isEmpty(curAppConfig.server) || curAppConfig.port == 0) {
+ return;
+ }
+ Intent intent = new Intent(context, MicroPhotoService.class);
+ intent.setAction(MicroPhotoService.ACTION_START);
+ intent.putExtra("cmdid", curAppConfig.cmdid);
+ intent.putExtra("server", curAppConfig.server);
+ intent.putExtra("port", curAppConfig.port);
+ intent.putExtra("protocol", curAppConfig.protocol);
+ intent.putExtra("networkProtocol", curAppConfig.networkProtocol);
+ // intent.putExtra("messenger", mMessenger);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ context.startForegroundService(intent);
+ } else {
+ context.startService(intent);
+ }
+ }
+
+ @Override
+ protected void onStart() {
+ // call the superclass method first
+ super.onStart();
+
+ String logFilePath = MicroPhotoService.buildAppDir(this.getApplicationContext());
+ logFilePath += "logs/log.txt";
+
+ mLogFileObserver = new LogFileObserver(logFilePath);
+ mLogFileObserver.startWatching();
+ }
+
+ @Override
+ protected void onStop() {
+ // call the superclass method first
+ super.onStop();
+
+ if (mLogFileObserver != null) {
+ mLogFileObserver.stopWatching();
+ mLogFileObserver = null;
+ }
+ }
+
+
+ @Override
+ protected void onDestroy() {
+
+ super.onDestroy();
+ }
+
private void setDefaultDataSubId(int subId) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {
@@ -512,10 +531,14 @@ public class MainActivity extends AppCompatActivity {
}
private AppConfig getAppConfig() {
+ return getAppConfig(this.getApplicationContext());
+ }
+
+ public static AppConfig getAppConfig(Context context) {
AppConfig appConfig = new AppConfig();
- String appPath = MicroPhotoService.buildAppDir(this.getApplicationContext());
+ String appPath = MicroPhotoService.buildAppDir(context);
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
index 2df4a6b0..2cc5b714 100644
--- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
+++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
@@ -69,6 +69,7 @@ public class MicroPhotoService extends Service {
private static final String ALARM_EVENT = "com.xinyingpower.mp.MicroPhotoService.AlarmReceiver";
public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 8466503;
+ // public static final int NOTIFICATION_ID_FOREGROUND_SERVICE = 0;
public static final String ACTION_START = "ACT_START";
public static final String ACTION_STOP = "ACT_STOP";
public static final String ACTION_MAIN = "ACT_MAIN";
@@ -180,6 +181,8 @@ public class MicroPhotoService extends Service {
mStateService = STATE_SERVICE.NOT_CONNECTED;
+ Log.w(TAG, "MicroPhotoService::onDestroy called");
+
uninit(mNativeHandle);
mNativeHandle = 0;
@@ -512,7 +515,9 @@ public class MicroPhotoService extends Service {
connect();
registerReceiver(mScreenaAtionReceiver, mScreenaAtionReceiver.getFilter());
- mMessenger = intent.getParcelableExtra("messenger");
+ if (intent.hasExtra("messenger")) {
+ mMessenger = intent.getParcelableExtra("messenger");
+ }
String appPath = buildAppDir(this.getApplicationContext());