From 5676cb6696b7cdc977ca867b88f0aa83e45b9a0b Mon Sep 17 00:00:00 2001 From: BlueMatthew Date: Tue, 19 Dec 2023 16:32:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=85=8D=E7=BD=AE=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E3=80=81=E4=BF=AE=E6=94=B9=E6=95=B0=E6=8D=AE=E7=9B=AE?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 12 +++ .../com/xypower/mpapp/ChannelActivity.java | 57 +++++++++++-- .../java/com/xypower/mpapp/MainActivity.java | 6 ++ .../com/xypower/mpapp/MicroPhotoService.java | 15 ++++ .../main/res/layout-land/activity_main.xml | 2 +- app/src/main/res/layout/activity_channel.xml | 85 ++++++++++++++++++- app/src/main/res/layout/activity_main.xml | 2 +- app/src/main/res/values/recog_options.xml | 8 ++ app/src/main/res/values/strings.xml | 4 + app/src/main/res/xml/file_provider_paths.xml | 4 + build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 12 files changed, 185 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/values/recog_options.xml create mode 100644 app/src/main/res/xml/file_provider_paths.xml 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" /> + +