diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e8ccd5bc..d92481fc 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -64,6 +64,7 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java
index a530cb4d..99469c87 100644
--- a/app/src/main/java/com/xypower/mpapp/ChannelActivity.java
+++ b/app/src/main/java/com/xypower/mpapp/ChannelActivity.java
@@ -4,6 +4,7 @@ import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
+import android.text.TextUtils;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
@@ -103,21 +104,45 @@ public class ChannelActivity extends AppCompatActivity {
InputStreamReader inputStreamReader = null;
BufferedReader bufferedReader = null;
try {
- inputStreamReader = new InputStreamReader(new FileInputStream(new File(appPath + "data/channels/" + String.valueOf(channel) + ".json")), "UTF-8");
- bufferedReader = new BufferedReader(inputStreamReader);
- String line;
- StringBuilder stringBuilder = new StringBuilder();
- while ((line = bufferedReader.readLine()) != null) {
- stringBuilder.append(line);
+ File channelFile = new File(appPath + "data/channels/" + String.valueOf(channel) + ".json");
+ StringBuilder stringBuilder = null;
+ if (channelFile.exists()) {
+
+ inputStreamReader = new InputStreamReader(new FileInputStream(channelFile), "UTF-8");
+ bufferedReader = new BufferedReader(inputStreamReader);
+ String line;
+ stringBuilder = new StringBuilder();
+ while ((line = bufferedReader.readLine()) != null) {
+ stringBuilder.append(line);
+ }
}
- JSONObject jsonObject = new JSONObject(stringBuilder.toString());
+ JSONObject jsonObject = stringBuilder != null ? (new JSONObject(stringBuilder.toString())) : new JSONObject();
binding.btnAutoExplosure.setChecked(jsonObject.optInt("autoExposure", 1) == 1);
binding.btnAutoFocus.setChecked(jsonObject.optInt("autoFocus", 1) == 1);
binding.btnHdrMode.setChecked(jsonObject.optInt("hdr", 1) == 1);
binding.exposuretime.setText(Integer.toString(jsonObject.optInt("exposureTime", 0)));
binding.sensitivity.setText(Integer.toString(jsonObject.optInt("sensibility", 0)));
binding.orientations.setSelection(jsonObject.optInt("orientation", 0));
+ binding.recognization.setSelection(jsonObject.optInt("recognization", 0));
+ if (jsonObject.has("cameraId")) {
+ binding.cameraId.setText(Integer.toString(jsonObject.optInt("cameraId", channel - 1)));
+ } else {
+ binding.cameraId.setText("");
+ }
+
+ JSONObject osdJsonObj = jsonObject.optJSONObject("osd");
+ if (osdJsonObj != null) {
+ binding.osdLeftTop.setText(osdJsonObj.optString("leftTop", ""));
+ binding.osdRightTop.setText(osdJsonObj.optString("rightTop", ""));
+ binding.osdRightBottom.setText(osdJsonObj.optString("rightBottom", ""));
+ binding.osdLeftBottom.setText(osdJsonObj.optString("leftBottom", ""));
+ } else {
+ binding.osdLeftTop.setText("");
+ binding.osdRightTop.setText("");
+ binding.osdRightBottom.setText("");
+ binding.osdLeftBottom.setText("");
+ }
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
@@ -196,9 +221,25 @@ public class ChannelActivity extends AppCompatActivity {
jsonObject.put("exposureTime", Integer.parseInt(binding.exposuretime.getText().toString()));
jsonObject.put("sensibility", Integer.parseInt(binding.sensitivity.getText().toString()));
jsonObject.put("orientation", binding.orientations.getSelectedItemPosition());
+ jsonObject.put("recognization", binding.recognization.getSelectedItemPosition());
+ // binding.cameraId.setText(jsonObject.optString("cameraId", ""));
+ if (!TextUtils.isEmpty(binding.cameraId.getText().toString())) {
+ jsonObject.put("cameraId", Integer.parseInt(binding.cameraId.getText().toString()));
+ } else {
+ jsonObject.remove("cameraId");
+ }
- } catch (JSONException ex) {
+ JSONObject osdJsonObj = jsonObject.optJSONObject("osd");
+ if (osdJsonObj == null) {
+ osdJsonObj = jsonObject.put("osd", new JSONObject());
+ }
+
+ osdJsonObj.put("leftTop", binding.osdLeftTop.getText().toString());
+ osdJsonObj.put("rightTop", binding.osdRightTop.getText().toString());
+ osdJsonObj.put("rightBottom", binding.osdRightBottom.getText().toString());
+ osdJsonObj.put("leftBottom", binding.osdLeftBottom.getText().toString());
+ } catch (JSONException ex) {
}
OutputStreamWriter outputStreamWriter = null;
try {
diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java
index 5584f335..18160ca0 100644
--- a/app/src/main/java/com/xypower/mpapp/MainActivity.java
+++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java
@@ -4,11 +4,13 @@ import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.SurfaceTexture;
import android.hardware.Camera;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
+import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.FileObserver;
@@ -22,6 +24,7 @@ import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.content.FileProvider;
import android.os.Bundle;
import android.telephony.SubscriptionManager;
@@ -51,6 +54,7 @@ import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.List;
import java.util.TimeZone;
import org.json.JSONException;
@@ -144,6 +148,8 @@ public class MainActivity extends AppCompatActivity {
binding.logs.setScrollbarFadingEnabled(false);
// binding.logs.setMaxLines(16);
+ // Context appContext = getApplicationContext();
+
mHandler = new Handler(Looper.myLooper()) {
@Override
public void handleMessage(@NonNull Message msg) {
diff --git a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
index 2cc5b714..562bb6e3 100644
--- a/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
+++ b/app/src/main/java/com/xypower/mpapp/MicroPhotoService.java
@@ -17,9 +17,12 @@ import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.net.ConnectivityManager;
+import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
+import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -29,6 +32,7 @@ import android.os.RemoteException;
import android.os.SystemClock;
import androidx.core.app.NotificationCompat;
+import androidx.core.content.FileProvider;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionManager;
@@ -673,6 +677,7 @@ public class MicroPhotoService extends Service {
public static String buildAppDir(Context contxt) {
+ /*
File[] paths = contxt.getExternalFilesDirs(null);
if (paths == null || paths.length == 0) {
@@ -680,6 +685,9 @@ public class MicroPhotoService extends Service {
}
File path = paths[0];
+ */
+
+ File path = new File(Environment.getExternalStorageDirectory(), contxt.getPackageName() + "/");
if (!path.exists() && !path.mkdirs()) {
return null;
@@ -727,6 +735,13 @@ public class MicroPhotoService extends Service {
return true;
}
+ public static Uri getUriForFile(Context context, File file) {
+ if (Build.VERSION.SDK_INT > 24) {
+ return FileProvider.getUriForFile(context, context.getPackageName() + ".fileProvider", file);
+ }
+ return Uri.fromFile(file);
+ }
+
public boolean requestPosition() {
try {
diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml
index 4dd0104d..ecf21d72 100644
--- a/app/src/main/res/layout-land/activity_main.xml
+++ b/app/src/main/res/layout-land/activity_main.xml
@@ -58,7 +58,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:ems="10"
- android:inputType="none|number"
+ android:inputType="none"
android:imeOptions="actionDone"
android:text="47.96.238.157"
app:layout_constraintStart_toStartOf="@+id/cmdid"
diff --git a/app/src/main/res/layout/activity_channel.xml b/app/src/main/res/layout/activity_channel.xml
index c3a13927..ebb97772 100644
--- a/app/src/main/res/layout/activity_channel.xml
+++ b/app/src/main/res/layout/activity_channel.xml
@@ -17,14 +17,26 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
@@ -75,7 +87,7 @@
android:ems="10"
android:inputType="numberDecimal"
android:layout_marginStart="6dp"
- android:layout_marginTop="6dp"
+ android:layout_marginTop="12dp"
app:layout_constraintStart_toEndOf="@+id/textViewExplosure"
app:layout_constraintTop_toBottomOf="@+id/btnAutoExplosure" />
@@ -121,4 +133,71 @@
app:layout_constraintStart_toEndOf="@+id/textViewOrientations"
app:layout_constraintTop_toBottomOf="@+id/exposuretime" />
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 2e3881f6..5f1fbb5d 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -55,7 +55,7 @@
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:ems="10"
- android:inputType=""
+ android:inputType="none"
android:text="47.96.238.157"
app:layout_constraintStart_toStartOf="@+id/cmdid"
app:layout_constraintTop_toBottomOf="@+id/cmdid" />
diff --git a/app/src/main/res/values/recog_options.xml b/app/src/main/res/values/recog_options.xml
new file mode 100644
index 00000000..36310899
--- /dev/null
+++ b/app/src/main/res/values/recog_options.xml
@@ -0,0 +1,8 @@
+
+
+
+ - 0-关闭AI识别
+ - 1-打开但不绘制
+ - 2-打开并绘制
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e8592a88..4b6e9c35 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,4 +1,8 @@
MicroPhoto
Notification Name
+ 左上 OSD
+ 右上 OSD
+ 右下 OSD
+ 左下 OSD
\ No newline at end of file
diff --git a/app/src/main/res/xml/file_provider_paths.xml b/app/src/main/res/xml/file_provider_paths.xml
new file mode 100644
index 00000000..2305dfaf
--- /dev/null
+++ b/app/src/main/res/xml/file_provider_paths.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/build.gradle b/build.gradle
index 6d0a2897..e402068a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,8 +19,8 @@ buildscript {
}
plugins {
- id 'com.android.application' version '7.4.2' apply false
- id 'com.android.library' version '7.4.2' apply false
+ id 'com.android.application' version '7.2.2' apply false
+ id 'com.android.library' version '7.2.2' apply false
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 87acbcea..c09c5feb 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Mon May 22 15:39:17 CST 2023
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
+distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME