协议可配置

serial
Matthew 2 years ago
parent 330f598120
commit fc9232b0a6

@ -2,8 +2,8 @@ plugins {
id 'com.android.application' id 'com.android.application'
} }
def AppVersionName = "1.0.11" def AppVersionName = "1.0.12"
def AppVersionCode = ((1 * 100 + 1) * 100 + 0) * 10 + 11 def AppVersionCode = ((1 * 100 + 1) * 100 + 0) * 10 + 12
android { android {
namespace 'com.xinyingpower.microphoto' namespace 'com.xinyingpower.microphoto'
@ -83,6 +83,9 @@ dependencies {
// implementation project(path: ':opencv') // implementation project(path: ':opencv')
implementation files('libs/devapi.aar') implementation files('libs/devapi.aar')
// https://mvnrepository.com/artifact/com.quickbirdstudios/opencv
implementation 'com.quickbirdstudios:opencv:4.5.3.0'
// implementation group: 'io.netty', name: 'netty-all', version: '4.1.96.Final' // implementation group: 'io.netty', name: 'netty-all', version: '4.1.96.Final'
// implementation 'io.netty:netty-all:4.1.23.Final' // implementation 'io.netty:netty-all:4.1.23.Final'
// implementation 'org.apache.logging.log4j:log4j-api:2.14.0' // implementation 'org.apache.logging.log4j:log4j-api:2.14.0'

@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.xinyingpower.microphoto",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 101010,
"versionName": "1.0.10",
"outputFile": "app-release.apk"
}
],
"elementType": "File"
}

@ -33,7 +33,6 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" tools:ignore="ProtectedPermissions" /> <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera" />
<application <application

@ -90,7 +90,7 @@ Java_com_xinyingpower_microphoto_MainActivity_takePhoto(
extern "C" JNIEXPORT jlong JNICALL extern "C" JNIEXPORT jlong JNICALL
Java_com_xinyingpower_microphoto_MicroPhotoService_init( Java_com_xinyingpower_microphoto_MicroPhotoService_init(
JNIEnv* env, JNIEnv* env,
jobject pThis, jstring appPath, jstring ip, jint port, jstring cmdid, jint protocol) { jobject pThis, jstring appPath, jstring ip, jint port, jstring cmdid, jint protocol, jint networkProtocol) {
/* /*
google_breakpad::MinidumpDescriptor descriptor("."); google_breakpad::MinidumpDescriptor descriptor(".");
@ -99,6 +99,7 @@ Java_com_xinyingpower_microphoto_MicroPhotoService_init(
*/ */
bool udpOrTcp = (networkProtocol != 0); // 0: tcp
const char *appPathStr = env->GetStringUTFChars(appPath, 0); const char *appPathStr = env->GetStringUTFChars(appPath, 0);
const char *ipStr = env->GetStringUTFChars(ip, 0); const char *ipStr = env->GetStringUTFChars(ip, 0);
const char *cmdidStr = env->GetStringUTFChars(cmdid, 0); const char *cmdidStr = env->GetStringUTFChars(cmdid, 0);
@ -110,12 +111,12 @@ Java_com_xinyingpower_microphoto_MicroPhotoService_init(
// CTerminalDevice* device = new CTerminalDevice(vm, pThis); // CTerminalDevice* device = new CTerminalDevice(vm, pThis);
// CPhoneDevice2* device = new CPhoneDevice2(vm, pThis); // CPhoneDevice2* device = new CPhoneDevice2(vm, pThis);
CTerminal* pTerminal = NewTerminal(GetCurrentProtocol()); CTerminal* pTerminal = NewTerminal(protocol);
CPhoneDevice* device = new CPhoneDevice(vm, pThis); CPhoneDevice* device = new CPhoneDevice(vm, pThis);
device->SetListener(pTerminal); device->SetListener(pTerminal);
pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port); pTerminal->InitServerInfo(appPathStr, cmdidStr, ipStr, port, udpOrTcp);
pTerminal->SetPacketSize(1 * 1024); // 1K pTerminal->SetPacketSize(1 * 1024); // 1K
bool res = pTerminal->Startup(device); bool res = pTerminal->Startup(device);

@ -227,6 +227,21 @@ int NdkCamera::open(const char* cameraId) {
} }
} }
{
ACameraMetadata_const_entry val = {0};
camera_status_t status = ACameraMetadata_getConstEntry(camera_metadata,
ACAMERA_CONTROL_AE_COMPENSATION_RANGE,
&val);
if (status == ACAMERA_OK) {
aeCompensationRange.min_ = val.data.i32[0];
aeCompensationRange.max_ = val.data.i32[1];
} else {
ALOGW("Unsupported ACAMERA_CONTROL_AE_COMPENSATION_RANGE");
aeCompensationRange.min_ = aeCompensationRange.max_ = 0l;
}
}
{ {
ACameraMetadata_const_entry val = {0}; ACameraMetadata_const_entry val = {0};
camera_status_t status = ACameraMetadata_getConstEntry(camera_metadata, camera_status_t status = ACameraMetadata_getConstEntry(camera_metadata,

@ -71,6 +71,7 @@ public:
RangeValue<int64_t> exposureRange; RangeValue<int64_t> exposureRange;
// int32_t sensitivity_; // int32_t sensitivity_;
RangeValue<int32_t> sensitivityRange; RangeValue<int32_t> sensitivityRange;
RangeValue<int32_t> aeCompensationRange;

@ -58,6 +58,8 @@ public class MainActivity extends AppCompatActivity {
public static final String TAG = "MainActivity"; public static final String TAG = "MainActivity";
private static int MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE = 100; private static int MY_PERMISSIONS_REQUEST_FOREGROUND_SERVICE = 100;
public final static int DEFAULT_PROTOCOL = 0xFF00;
// Used to load the 'microphoto' library on application startup. // Used to load the 'microphoto' library on application startup.
static { static {
System.loadLibrary("microphoto"); System.loadLibrary("microphoto");
@ -76,6 +78,7 @@ public class MainActivity extends AppCompatActivity {
public String server; public String server;
public int port; public int port;
public int protocol; public int protocol;
public int networkProtocol;
} }
@Override @Override
@ -96,12 +99,21 @@ public class MainActivity extends AppCompatActivity {
String cmdid = "0123456789ABCDEFG"; String cmdid = "0123456789ABCDEFG";
String server = "47.96.238.157"; String server = "47.96.238.157";
Integer port = new Integer(6891); Integer port = new Integer(6891);
Integer protocol = new Integer(0xFF00); // 0xFF00 Integer protocol = new Integer(DEFAULT_PROTOCOL); // 0xFF00
AppConfig appConfig = getAppConfig(); AppConfig appConfig = getAppConfig();
binding.cmdid.setText(appConfig.cmdid); binding.cmdid.setText(appConfig.cmdid);
binding.server.setText(appConfig.server); binding.server.setText(appConfig.server);
binding.port.setText(appConfig.port != 0 ? Integer.toString(appConfig.port) : ""); binding.port.setText(appConfig.port != 0 ? Integer.toString(appConfig.port) : "");
String protocolStr = appConfig.protocol + "-";
for (int idx = 0; idx < binding.protocol.getCount(); idx++) {
String item = binding.protocol.getItemAtPosition(idx).toString();
if (item.startsWith(protocolStr)) {
binding.protocol.setSelection(idx);
break;
}
}
this.binding.startServBtn.setOnClickListener(new View.OnClickListener() { this.binding.startServBtn.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -125,21 +137,16 @@ public class MainActivity extends AppCompatActivity {
int channel = 2; int channel = 2;
String path = buildPhotoDir(channel); String path = buildPhotoDir(channel);
String fileName = buildPhotoFileName(channel, 255); String fileName = buildPhotoFileName(channel, 255);
// MainActivity.this.takePhoto(channel, 255, path, fileName);
String cmdid = MainActivity.this.binding.cmdid.getText().toString();
String server = MainActivity.this.binding.server.getText().toString();
int port = Integer.parseInt(MainActivity.this.binding.port.getText().toString());
int protocol = 0xFF00;
MainActivity.this.saveAppConfig(cmdid, server, port, protocol); AppConfig curAppConfig = retrieveAndSaveAppConfig();
Intent intent = new Intent(MainActivity.this, MicroPhotoService.class); Intent intent = new Intent(MainActivity.this, MicroPhotoService.class);
intent.setAction(MicroPhotoService.ACTION_START); intent.setAction(MicroPhotoService.ACTION_START);
intent.putExtra("cmdid", cmdid); intent.putExtra("cmdid", curAppConfig.cmdid);
intent.putExtra("server", server); intent.putExtra("server", curAppConfig.server);
intent.putExtra("port", port); intent.putExtra("port", curAppConfig.port);
intent.putExtra("protocol", protocol); intent.putExtra("protocol", curAppConfig.protocol);
intent.putExtra("networkProtocol", curAppConfig.networkProtocol);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
MainActivity.this.startForegroundService(intent); MainActivity.this.startForegroundService(intent);
@ -151,6 +158,15 @@ public class MainActivity extends AppCompatActivity {
binding.stopServBtn.setEnabled(true); binding.stopServBtn.setEnabled(true);
} }
}); });
this.binding.saveCfg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
retrieveAndSaveAppConfig();
}
});
this.binding.takePhotoBtn.setOnClickListener(new View.OnClickListener() { this.binding.takePhotoBtn.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -345,6 +361,25 @@ public class MainActivity extends AppCompatActivity {
} }
} }
private AppConfig retrieveAndSaveAppConfig() {
AppConfig appConfig = new AppConfig();
appConfig.cmdid = MainActivity.this.binding.cmdid.getText().toString();
appConfig.server = MainActivity.this.binding.server.getText().toString();
appConfig.port = Integer.parseInt(MainActivity.this.binding.port.getText().toString());
String protocolStr = MainActivity.this.binding.protocol.getSelectedItem().toString();
appConfig.protocol = DEFAULT_PROTOCOL;
String[] parts = protocolStr.split("-");
if (parts != null) {
appConfig.protocol = Integer.parseInt(parts[0]);
}
appConfig.networkProtocol = MainActivity.this.binding.networkProtocol.getSelectedItemPosition();
saveAppConfig(appConfig.cmdid, appConfig.server, appConfig.port, appConfig.protocol, appConfig.networkProtocol);
return appConfig;
}
private AppConfig getAppConfig() { private AppConfig getAppConfig() {
AppConfig appConfig = new AppConfig(); AppConfig appConfig = new AppConfig();
@ -367,6 +402,11 @@ public class MainActivity extends AppCompatActivity {
appConfig.server = jsonObject.getString("Server"); appConfig.server = jsonObject.getString("Server");
appConfig.port = jsonObject.getInt("Port"); appConfig.port = jsonObject.getInt("Port");
appConfig.protocol = jsonObject.getInt("Protocol"); appConfig.protocol = jsonObject.getInt("Protocol");
appConfig.networkProtocol = jsonObject.getInt("NetworkProtocol");
if (appConfig.protocol == 0) {
appConfig.protocol = DEFAULT_PROTOCOL;
}
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
e.printStackTrace(); e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
@ -386,7 +426,7 @@ public class MainActivity extends AppCompatActivity {
return appConfig; return appConfig;
} }
private void saveAppConfig(String cmdid, String server, int port, int protocol) { private void saveAppConfig(String cmdid, String server, int port, int protocol, int networkProtocol) {
String appPath = MicroPhotoService.buildAppDir(this.getApplicationContext()); String appPath = MicroPhotoService.buildAppDir(this.getApplicationContext());
@ -398,6 +438,7 @@ public class MainActivity extends AppCompatActivity {
jsonObject.put("Server", server); jsonObject.put("Server", server);
jsonObject.put("Port", port); jsonObject.put("Port", port);
jsonObject.put("Protocol", protocol); jsonObject.put("Protocol", protocol);
jsonObject.put("NetworkProtocol", networkProtocol);
outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(appPath + "data/App.json")), "UTF-8"); outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File(appPath + "data/App.json")), "UTF-8");
outputStreamWriter.write(jsonObject.toString()); outputStreamWriter.write(jsonObject.toString());

@ -444,9 +444,10 @@ public class MicroPhotoService extends Service {
int port = intent.getIntExtra("port", 0); int port = intent.getIntExtra("port", 0);
String cmdid = intent.getStringExtra("cmdid"); String cmdid = intent.getStringExtra("cmdid");
int protocol = intent.getIntExtra("protocol", 0); int protocol = intent.getIntExtra("protocol", 0);
int networkProtocol = intent.getIntExtra("networkProtocol", 0);
Log.i(TAG, "AppPath=" + appPath + " Server=" + ip + ":" + port + " cmdid=" + cmdid + " protocol" + protocol); Log.i(TAG, "AppPath=" + appPath + " Server=" + ip + ":" + port + " cmdid=" + cmdid + " protocol" + protocol + " Network=" + networkProtocol);
mHandler = init(appPath, ip, port, cmdid, protocol); mHandler = init(appPath, ip, port, cmdid, protocol, networkProtocol);
// Start the locker receiver // Start the locker receiver
@ -735,7 +736,7 @@ CellSignalStrengthGsm cellSignalStrengthGsm = cellInfoGsm.getCellSignalStrength(
cellSignalStrengthGsm.getDbm(); cellSignalStrengthGsm.getDbm();
*/ */
protected native long init(String appPath, String ip, int port, String cmdid, int protocol); protected native long init(String appPath, String ip, int port, String cmdid, int protocol, int networkProtocl);
protected native long getHeartbeatDuration(long handler); protected native long getHeartbeatDuration(long handler);
protected native long[] getPhotoTimeData(long handler); protected native long[] getPhotoTimeData(long handler);
// protected native long[] getNextScheduleItem(long handler); // protected native long[] getNextScheduleItem(long handler);

@ -12,7 +12,7 @@
android:id="@+id/textViewCmdId" android:id="@+id/textViewCmdId"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="20dp" android:layout_marginLeft="8dp"
android:text="CMDID" android:text="CMDID"
app:layout_constraintBottom_toBottomOf="@+id/cmdid" app:layout_constraintBottom_toBottomOf="@+id/cmdid"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
@ -22,8 +22,8 @@
android:id="@+id/cmdid" android:id="@+id/cmdid"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="20dp" android:layout_marginLeft="8dp"
android:layout_marginTop="20dp" android:layout_marginTop="8dp"
android:ems="10" android:ems="10"
android:text="XY-ANDROIDSIM-001" android:text="XY-ANDROIDSIM-001"
app:layout_constraintLeft_toRightOf="@+id/textViewCmdId" app:layout_constraintLeft_toRightOf="@+id/textViewCmdId"
@ -35,7 +35,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="4dp" android:layout_marginLeft="4dp"
android:layout_marginRight="4dp" android:layout_marginRight="4dp"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:entries="@array/protocols"
app:layout_constraintLeft_toRightOf="@+id/cmdid" app:layout_constraintLeft_toRightOf="@+id/cmdid"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/cmdid" /> app:layout_constraintTop_toTopOf="@+id/cmdid" />
@ -44,7 +45,7 @@
android:id="@+id/textView" android:id="@+id/textView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="20dp" android:layout_marginTop="8dp"
android:text="Server" android:text="Server"
app:layout_constraintBottom_toBottomOf="@+id/server" app:layout_constraintBottom_toBottomOf="@+id/server"
app:layout_constraintStart_toStartOf="@id/textViewCmdId" app:layout_constraintStart_toStartOf="@id/textViewCmdId"
@ -54,7 +55,7 @@
android:id="@+id/server" android:id="@+id/server"
android:layout_width="160dp" android:layout_width="160dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="8dp" android:layout_marginTop="4dp"
android:ems="10" android:ems="10"
android:inputType="" android:inputType=""
android:text="47.96.238.157" android:text="47.96.238.157"
@ -72,12 +73,24 @@
app:layout_constraintLeft_toRightOf="@+id/server" app:layout_constraintLeft_toRightOf="@+id/server"
app:layout_constraintTop_toTopOf="@+id/server" /> app:layout_constraintTop_toTopOf="@+id/server" />
<Spinner
android:id="@+id/networkProtocol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:entries="@array/networkProtocols"
app:layout_constraintLeft_toRightOf="@+id/port"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/port" />
<Button <Button
android:id="@+id/startServBtn" android:id="@+id/startServBtn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="20dp" android:layout_marginLeft="8dp"
android:layout_marginTop="24dp" android:layout_marginTop="8dp"
android:text="Start" android:text="Start"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/port" app:layout_constraintTop_toBottomOf="@+id/port"
@ -88,29 +101,41 @@
android:id="@+id/stopServBtn" android:id="@+id/stopServBtn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="8dp"
android:layout_marginTop="24dp" android:layout_marginTop="8dp"
android:enabled="false" android:enabled="false"
android:text="Stop" android:text="Stop"
app:layout_constraintStart_toEndOf="@+id/startServBtn" app:layout_constraintStart_toEndOf="@+id/startServBtn"
app:layout_constraintTop_toBottomOf="@+id/port" /> app:layout_constraintTop_toBottomOf="@+id/port" />
<Button
android:id="@+id/saveCfg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="0dp"
android:text="Save"
app:layout_constraintStart_toEndOf="@+id/stopServBtn"
app:layout_constraintTop_toTopOf="@+id/startServBtn" />
<Button <Button
android:id="@+id/simchange" android:id="@+id/simchange"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="20dp" android:layout_marginStart="8dp"
android:layout_marginTop="24dp" android:layout_marginTop="8dp"
android:text="sim卡获取" android:text="sim卡获取"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/startServBtn" /> app:layout_constraintTop_toBottomOf="@+id/startServBtn" />
<Button <Button
android:id="@+id/simchange2" android:id="@+id/simchange2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
android:layout_marginTop="24dp" android:layout_marginTop="8dp"
android:text="切换sim2" android:text="切换sim2"
app:layout_constraintStart_toEndOf="@+id/simchange" app:layout_constraintStart_toEndOf="@+id/simchange"
app:layout_constraintTop_toBottomOf="@+id/startServBtn" /> app:layout_constraintTop_toBottomOf="@+id/startServBtn" />
@ -119,7 +144,8 @@
android:id="@+id/takePhotoBtn" android:id="@+id/takePhotoBtn"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="8dp"
android:layout_marginStart="8dp"
android:text="TK Photo" android:text="TK Photo"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/simchange" /> app:layout_constraintTop_toBottomOf="@+id/simchange" />
@ -128,8 +154,8 @@
android:id="@+id/takePhotoBtn2" android:id="@+id/takePhotoBtn2"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="4dp"
android:layout_marginTop="16dp" android:layout_marginTop="8dp"
android:text="TP 2" android:text="TP 2"
app:layout_constraintStart_toEndOf="@+id/takePhotoBtn" app:layout_constraintStart_toEndOf="@+id/takePhotoBtn"
app:layout_constraintTop_toBottomOf="@+id/simchange" /> app:layout_constraintTop_toBottomOf="@+id/simchange" />
@ -138,8 +164,8 @@
android:id="@+id/takePhotoBtn3" android:id="@+id/takePhotoBtn3"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="4dp"
android:layout_marginTop="16dp" android:layout_marginTop="8dp"
android:text="TP 3" android:text="TP 3"
app:layout_constraintStart_toEndOf="@+id/takePhotoBtn2" app:layout_constraintStart_toEndOf="@+id/takePhotoBtn2"
app:layout_constraintTop_toBottomOf="@+id/simchange" /> app:layout_constraintTop_toBottomOf="@+id/simchange" />
@ -149,8 +175,8 @@
android:id="@+id/takePhotoBtn4" android:id="@+id/takePhotoBtn4"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="8dp" android:layout_marginStart="4dp"
android:layout_marginTop="16dp" android:layout_marginTop="8dp"
android:text="TP 4" android:text="TP 4"
app:layout_constraintStart_toEndOf="@+id/takePhotoBtn3" app:layout_constraintStart_toEndOf="@+id/takePhotoBtn3"
app:layout_constraintTop_toBottomOf="@+id/simchange" /> app:layout_constraintTop_toBottomOf="@+id/simchange" />

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="networkProtocols">
<item>TCP</item>
<item>UDP</item>
</string-array>
</resources>

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="protocols">
<item>65281-安徽</item>
<item>65283-湖南</item>
<item>65285-河南</item>
<item>65286-郑州</item>
</string-array>
</resources>
Loading…
Cancel
Save