界面增加摄像头信息查询功能

serial
BlueMatthew 1 year ago
parent e50d677f89
commit 86b00231b0

@ -34,6 +34,7 @@ import android.widget.Toast;
import com.dev.devapi.api.SysApi;
import com.dowse.camera.client.DSCameraManager;
import com.xypower.common.CameraUtils;
import com.xypower.common.MicroPhotoContext;
import com.xypower.mpapp.databinding.ActivityMainBinding;
import com.xypower.mpapp.utils.RandomReader;
@ -55,6 +56,9 @@ public class MainActivity extends AppCompatActivity {
System.loadLibrary("microphoto");
}
public static final int MAX_LOG_LINES = 64; // 320;
private int mLines = 0;
private ActivityMainBinding binding;
private Handler mHandler = null;
@ -168,11 +172,27 @@ public class MainActivity extends AppCompatActivity {
} catch (Exception e) {
}
if (log != null) {
long lines = log.chars().filter(ch -> ch == '\n').count();
if (mLines + lines > MAX_LOG_LINES) {
int excessLineNumber = mLines + (int)lines - MAX_LOG_LINES;
int eolIndex = -1;
CharSequence charSequence = binding.logs.getText();
for(int i = 0; i < excessLineNumber; i++) {
do {
eolIndex++;
} while(eolIndex < charSequence.length() && charSequence.charAt(eolIndex) != '\n');
}
if (eolIndex < charSequence.length()) {
binding.logs.getEditableText().delete(0, eolIndex+1);
}
}
binding.logs.append(log);
int line = binding.logs.getLineCount();
// if (line > 9) {//超出屏幕自动滚动显示(9是当前页面显示的最大行数)
int offset = line * binding.logs.getLineHeight();
int offset = binding.logs.getLineCount() * binding.logs.getLineHeight();
if (offset > binding.logs.getHeight()) {
binding.logs.scrollTo(0, offset - binding.logs.getHeight() + binding.logs.getLineHeight());
}
@ -445,9 +465,6 @@ public class MainActivity extends AppCompatActivity {
}
});
binding.btnSendHb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@ -488,6 +505,21 @@ public class MainActivity extends AppCompatActivity {
}
});
binding.btnCameraInfo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SysApi.setOtgState(true);
SysApi.setCam3V3Enable(true);
String cameraInfo = CameraUtils.getAllCameraInfo(view.getContext());
SysApi.setCam3V3Enable(false);
SysApi.setOtgState(false);
Toast.makeText(view.getContext(), cameraInfo, Toast.LENGTH_LONG).show();
}
});
}
public static void startMicroPhotoService(Context context, MicroPhotoContext.AppConfig curAppConfig, Messenger messenger) {
@ -549,7 +581,6 @@ public class MainActivity extends AppCompatActivity {
super.onDestroy();
}
private void setDefaultDataSubId(int subId) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {

@ -304,6 +304,16 @@
app:layout_constraintStart_toEndOf="@+id/btnRestartApp"
app:layout_constraintTop_toTopOf="@+id/btnSendHb" />
<Button
android:id="@+id/btnCameraInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_camera_info"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:minWidth="@dimen/activity_btn_min_width"
app:layout_constraintStart_toEndOf="@+id/btnReboot"
app:layout_constraintTop_toTopOf="@+id/btnSendHb" />
<Button
android:id="@+id/simchange"

@ -311,6 +311,16 @@
app:layout_constraintStart_toEndOf="@+id/btnRestartApp"
app:layout_constraintTop_toBottomOf="@+id/btnTakePhoto" />
<Button
android:id="@+id/btnCameraInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/main_camera_info"
android:layout_marginStart="@dimen/activity_horizontal_margin"
android:minWidth="@dimen/activity_btn_min_width"
app:layout_constraintStart_toEndOf="@+id/btnReboot"
app:layout_constraintTop_toTopOf="@+id/btnSendHb" />
<Button
android:id="@+id/gps"
android:layout_width="wrap_content"

@ -9,6 +9,7 @@
<string name="main_send_hb">心跳</string>
<string name="main_restart_app">重启APP</string>
<string name="main_reboot">重启设备</string>
<string name="main_camera_info">摄像头</string>
<string name="confirm_reboot">重启设备</string>
<string name="text_confirm_reboot">确认重启设备吗?</string>

@ -0,0 +1,139 @@
package com.xypower.common;
import android.content.Context;
import android.graphics.ImageFormat;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.util.Log;
import android.util.Size;
public class CameraUtils {
public static String getAllCameraInfo(Context context) {
StringBuilder builder = new StringBuilder();
try {
CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
String[] cameraIds = cameraManager.getCameraIdList();
builder.append("Count:");
builder.append(Integer.toString(cameraIds.length));
builder.append("\n");
int idx = 1;
for (String cameraId : cameraIds) {
CameraCharacteristics cameraCharacteristics = null;
try {
cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
} catch (Exception ex) {
ex.printStackTrace();
}
if (cameraCharacteristics != null) {
builder.append(idx++);
builder.append(": Id=");
builder.append(cameraId);
builder.append(" facing=");
Integer facing = cameraCharacteristics.get(CameraCharacteristics.LENS_FACING);
builder.append(facing == null ? "" : facing.toString());
builder.append(" orientation=");
Integer orientation = cameraCharacteristics.get(CameraCharacteristics.SENSOR_ORIENTATION);
builder.append(orientation == null ? "" : orientation.toString());
StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = map.getOutputSizes(ImageFormat.JPEG);
for (int i = 0; i < sizes.length; i++) {
Size itemSize = sizes[i];
builder.append("(" + itemSize.getWidth() + "," + itemSize.getHeight() + ")");
break;
}
builder.append("\n");
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return builder.toString();
}
public static String getDetailedCameraInfo(Context context, String cameraId) {
StringBuilder builder = new StringBuilder();
try {
CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
CameraCharacteristics cameraCharacteristics = null;
try {
cameraCharacteristics = cameraManager.getCameraCharacteristics(cameraId);
} catch (Exception ex) {
ex.printStackTrace();
}
if (cameraCharacteristics != null) {
int[] capabilities = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AF_AVAILABLE_MODES);
if (capabilities != null) {
for (int c : capabilities) {
builder.append("CONTROL_AF_AVAILABLE_MODES: (" + Integer.toString(c) + ")");
if (c == CameraMetadata.CONTROL_AF_MODE_OFF) {
builder.append(" CONTROL_AF_MODE_OFF");
} else if (c == CameraMetadata.CONTROL_AF_MODE_AUTO) {
builder.append(" CONTROL_AF_MODE_AUTO");
} else if (c == CameraMetadata.CONTROL_AF_MODE_MACRO) {
builder.append(" CONTROL_AF_MODE_MACRO");
} else if (c == CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_VIDEO) {
builder.append(" CONTROL_AF_MODE_CONTINUOUS_VIDEO");
} else if (c == CameraMetadata.CONTROL_AF_MODE_CONTINUOUS_PICTURE) {
builder.append(" CONTROL_AF_MODE_CONTINUOUS_PICTURE");
} else if (c == CameraMetadata.CONTROL_AF_MODE_EDOF) {
builder.append(" CONTROL_AF_MODE_EDOF");
}
builder.append("\n");
}
}
float[] apertures = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_APERTURES);
if (apertures != null) {
if (apertures != null) {
for (float f : apertures) {
builder.append("LENS_INFO_AVAILABLE_APERTURES: " + Float.toString(f) + "\n");
}
}
}
Integer maxAf = cameraCharacteristics.get(CameraCharacteristics.CONTROL_MAX_REGIONS_AF);
builder.append("CONTROL_MAX_REGIONS_AF: " + Integer.toString(maxAf) + "\n");
float[] lengths = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS);
if (lengths != null) {
for (float f : lengths) {
builder.append("LENS_INFO_AVAILABLE_FOCAL_LENGTHS: " + Float.toString(f) + "\n");
}
}
Float dis = cameraCharacteristics.get(CameraCharacteristics.LENS_INFO_MINIMUM_FOCUS_DISTANCE);
builder.append("LENS_INFO_MINIMUM_FOCUS_DISTANCE: " + ((dis == null) ? "null" : dis.toString()) + "\n");
StreamConfigurationMap map = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] sizes = map.getOutputSizes(ImageFormat.YUV_420_888);
for (int i = 0; i < sizes.length; i++) { //遍历所有Size
Size itemSize = sizes[i];
// Log.e(TAG, "当前itemSize 宽=" + itemSize.getWidth() + "高=" + itemSize.getHeight());
builder.append("Available Size: (" + itemSize.getWidth() + "," + itemSize.getHeight() + ")\n");
}
Log.i("CAM", builder.toString());
}
} catch (Exception ex) {
ex.printStackTrace();
}
return builder.toString();
}
}
Loading…
Cancel
Save