|
|
|
@ -5,6 +5,10 @@
|
|
|
|
|
|
|
|
|
|
package com.uns.maincar.gui;
|
|
|
|
|
|
|
|
|
|
import static com.uns.maincar.cpp_interface.ColoredQRDecoder.ERR_COLOR_INVALIDATE;
|
|
|
|
|
import static com.uns.maincar.cpp_interface.QRDecoder.ERR_DECODE_FAILED;
|
|
|
|
|
import static com.uns.maincar.cpp_interface.QRDecoder.ERR_IMAGE_GENERATOR_FAILED;
|
|
|
|
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
|
|
import android.app.Activity;
|
|
|
|
|
import android.content.Context;
|
|
|
|
@ -36,15 +40,14 @@ import com.uns.maincar.communication.WifiTransferCore;
|
|
|
|
|
import com.uns.maincar.constants.Commands;
|
|
|
|
|
import com.uns.maincar.constants.Flags;
|
|
|
|
|
import com.uns.maincar.constants.Flags.TrafficLightColors;
|
|
|
|
|
import com.uns.maincar.constants.GlobalSignType;
|
|
|
|
|
import com.uns.maincar.constants.GlobalColor;
|
|
|
|
|
import com.uns.maincar.cpp_interface.CarLicense;
|
|
|
|
|
import com.uns.maincar.cpp_interface.ColoredQRDecoder;
|
|
|
|
|
import com.uns.maincar.cpp_interface.EnvTest;
|
|
|
|
|
import com.uns.maincar.cpp_interface.MainCarAES;
|
|
|
|
|
import com.uns.maincar.cpp_interface.OCR;
|
|
|
|
|
import com.uns.maincar.cpp_interface.QRDecoder;
|
|
|
|
|
import com.uns.maincar.cpp_interface.ShapeColor;
|
|
|
|
|
import com.uns.maincar.cpp_interface.TrafficLight;
|
|
|
|
|
import com.uns.maincar.cpp_interface.TrafficSign;
|
|
|
|
|
import com.uns.maincar.data_type.ShapeColorResult;
|
|
|
|
|
import com.uns.maincar.open_source.shape.ShapeDetector;
|
|
|
|
|
import com.uns.maincar.open_source.traffic_sign.YoloV5_tfLite_TSDetector;
|
|
|
|
@ -173,7 +176,8 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
break;
|
|
|
|
|
//收到QR指令,开始识别二维码,回传识别成功的数据
|
|
|
|
|
case Commands.RECEIVE_QR:
|
|
|
|
|
byte[] cmd = RecognizeQrCode();
|
|
|
|
|
//默认情况下使用黑白二维码识别
|
|
|
|
|
byte[] cmd = RecognizeQrCode(false, GlobalColor.INVALIDATE);
|
|
|
|
|
if (cmd[2] == Commands.QR_FAILED)
|
|
|
|
|
dtc_client.Send(cmd);
|
|
|
|
|
else
|
|
|
|
@ -204,7 +208,9 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
case Commands.RECEIVE_TEXT_OCR:
|
|
|
|
|
OCRRecognizeText();
|
|
|
|
|
break;
|
|
|
|
|
//收到未知指令,回传异常指令,表示无法解析当前指令
|
|
|
|
|
case Commands.RECEIVE_VEHICLE:
|
|
|
|
|
dtc_client.Send(RecognizeVehicle());
|
|
|
|
|
//收到未知指令,回传异常指令,表示无法解析当前指令
|
|
|
|
|
default:
|
|
|
|
|
CommandEncoder error = new CommandEncoder();
|
|
|
|
|
dtc_client.Send(error.GenerateCommand(Commands.CMD_NOT_MATCH, (byte) 0x00, (byte) 0x00, (byte) 0x00));
|
|
|
|
@ -249,6 +255,16 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
return MainCarAES.CalcAES(validate_result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//处理彩色二维码数据,使用从C++代码中导出的算法
|
|
|
|
|
private byte[] ProcessColoredQRData(String qr_data)
|
|
|
|
|
{
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
if (qr_data.equals(""))
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
else
|
|
|
|
|
return MainCarAES.CalcAES(qr_data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取程序自检指令,根据自检状态返回成功或失败
|
|
|
|
|
private byte[] SystemStatusCommand()
|
|
|
|
|
{
|
|
|
|
@ -260,20 +276,39 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//识别二维码
|
|
|
|
|
private byte[] RecognizeQrCode()
|
|
|
|
|
private byte[] RecognizeQrCode(boolean colored, GlobalColor target_color)
|
|
|
|
|
{
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
ArrayList<String> qr_result = new ArrayList<>();
|
|
|
|
|
if (!QRDecoder.BeginQRDecode(currImage))
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
while (QRDecoder.HasNextCode())
|
|
|
|
|
qr_result.add(QRDecoder.DecodeNextQR());
|
|
|
|
|
if (qr_result.size() <= 0)
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
if (!colored)
|
|
|
|
|
{
|
|
|
|
|
ArrayList<String> qr_result = new ArrayList<>();
|
|
|
|
|
if (!QRDecoder.BeginQRDecode(currImage))
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
while (QRDecoder.HasNextCode())
|
|
|
|
|
qr_result.add(QRDecoder.DecodeNextQR());
|
|
|
|
|
if (qr_result.size() <= 0)
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
qr_result.forEach(qr -> ToastLog(qr, false, true));
|
|
|
|
|
return ProcessQRData(qr_result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
qr_result.forEach(qr -> ToastLog(qr, false, true));
|
|
|
|
|
return ProcessQRData(qr_result);
|
|
|
|
|
boolean success = ColoredQRDecoder.BeginQRDecode(currImage, false);
|
|
|
|
|
if (!success)
|
|
|
|
|
success = ColoredQRDecoder.BeginQRDecode(currImage, true);
|
|
|
|
|
if (!success)
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
String result = ColoredQRDecoder.DecodeSpecColorQR(target_color);
|
|
|
|
|
if (Objects.equals(result, ERR_COLOR_INVALIDATE) || Objects.equals(result, ERR_IMAGE_GENERATOR_FAILED) || Objects.equals(result, ERR_DECODE_FAILED))
|
|
|
|
|
return encoder.GenerateCommand(Commands.QR_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ToastLog(target_color + ":" + result, false, true);
|
|
|
|
|
return ProcessColoredQRData(result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -300,54 +335,20 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
private byte[] RecognizeShapeColor()
|
|
|
|
|
{
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
if (!ShapeColor.RecognizeEverything(currImage))
|
|
|
|
|
/*if (!ShapeColor.RecognizeEverything(currImage))
|
|
|
|
|
return encoder.GenerateCommand(Commands.COLOR_SHAPE_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
byte a = 0, b = 0, c = 0;
|
|
|
|
|
//测试用输出
|
|
|
|
|
/*ToastLog("C-R-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.RED), false, false);
|
|
|
|
|
ToastLog("C-BL-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.BLACK), false, false);
|
|
|
|
|
ToastLog("C-G-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.GREEN), false, false);
|
|
|
|
|
ToastLog("C-BU-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.BLUE), false, false);
|
|
|
|
|
ToastLog("C-C-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.CYAN), false, false);
|
|
|
|
|
ToastLog("C-P-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.PURPLE), false, false);
|
|
|
|
|
ToastLog("C-W-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.WHITE), false, false);
|
|
|
|
|
ToastLog("C-Y-"+ShapeColor.LookupResult(GlobalShape.CIRCLE, GlobalColor.YELLOW), false, false);
|
|
|
|
|
ToastLog("S-R-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.RED), false, false);
|
|
|
|
|
ToastLog("S-BL-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.BLACK), false, false);
|
|
|
|
|
ToastLog("S-G-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.GREEN), false, false);
|
|
|
|
|
ToastLog("S-BU-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.BLUE), false, false);
|
|
|
|
|
ToastLog("S-C-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.CYAN), false, false);
|
|
|
|
|
ToastLog("S-P-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.PURPLE), false, false);
|
|
|
|
|
ToastLog("S-W-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.WHITE), false, false);
|
|
|
|
|
ToastLog("S-Y-"+ShapeColor.LookupResult(GlobalShape.STAR, GlobalColor.YELLOW), false, false);
|
|
|
|
|
ToastLog("s-R-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.RED), false, false);
|
|
|
|
|
ToastLog("s-BL-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.BLACK), false, false);
|
|
|
|
|
ToastLog("s-G-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.GREEN), false, false);
|
|
|
|
|
ToastLog("s-BU-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.BLUE), false, false);
|
|
|
|
|
ToastLog("s-C-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.CYAN), false, false);
|
|
|
|
|
ToastLog("s-P-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.PURPLE), false, false);
|
|
|
|
|
ToastLog("s-W-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.WHITE), false, false);
|
|
|
|
|
ToastLog("s-Y-"+ShapeColor.LookupResult(GlobalShape.SQUARE, GlobalColor.YELLOW), false, false);
|
|
|
|
|
ToastLog("R-R-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.RED), false, false);
|
|
|
|
|
ToastLog("R-BL-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.BLACK), false, false);
|
|
|
|
|
ToastLog("R-G-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.GREEN), false, false);
|
|
|
|
|
ToastLog("R-BU-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.BLUE), false, false);
|
|
|
|
|
ToastLog("R-C-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.CYAN), false, false);
|
|
|
|
|
ToastLog("R-P-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.PURPLE), false, false);
|
|
|
|
|
ToastLog("R-W-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.WHITE), false, false);
|
|
|
|
|
ToastLog("R-Y-"+ShapeColor.LookupResult(GlobalShape.RECTANGLE, GlobalColor.YELLOW), false, false);
|
|
|
|
|
ToastLog("T-R-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.RED), false, false);
|
|
|
|
|
ToastLog("T-BL-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.BLACK), false, false);
|
|
|
|
|
ToastLog("T-G-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.GREEN), false, false);
|
|
|
|
|
ToastLog("T-BU-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.BLUE), false, false);
|
|
|
|
|
ToastLog("T-C-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.CYAN), false, false);
|
|
|
|
|
ToastLog("T-P-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.PURPLE), false, false);
|
|
|
|
|
ToastLog("T-W-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.WHITE), false, false);
|
|
|
|
|
ToastLog("T-Y-"+ShapeColor.LookupResult(GlobalShape.TRIANGLE, GlobalColor.YELLOW), false, false);*/
|
|
|
|
|
|
|
|
|
|
return encoder.GenerateCommand(Commands.COLOR_SHAPE_SUCCESS, a, b, c);
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
//形状颜色识别改用开源AI模型
|
|
|
|
|
ShapeDetector detector = new ShapeDetector();
|
|
|
|
|
detector.shapePicProcess(currImage);
|
|
|
|
|
ShapeColorResult result = detector.GetAllResult();
|
|
|
|
|
ToastLog(result.toString(), false, true);
|
|
|
|
|
return encoder.GenerateCommand();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//识别车牌
|
|
|
|
@ -401,7 +402,7 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
private byte[] RecognizeTrafficSign()
|
|
|
|
|
{
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
GlobalSignType type = TrafficSign.SignRecognize(currImage);
|
|
|
|
|
/*GlobalSignType type = TrafficSign.SignRecognize(currImage);
|
|
|
|
|
if (type == GlobalSignType.Failure)
|
|
|
|
|
return encoder.GenerateCommand(Commands.TRAFFIC_SIGN_FAILED, (byte) 0, (byte) 0, (byte) 0);
|
|
|
|
|
else
|
|
|
|
@ -429,7 +430,11 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
return encoder.GenerateCommand();
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
//交通标志改用开源AI模型识别
|
|
|
|
|
String result = TS_Detector.processImage(currImage);
|
|
|
|
|
ToastLog("Traffic Sign: " + result, false, true);
|
|
|
|
|
return encoder.GenerateCommand();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//识别静态文本
|
|
|
|
@ -468,6 +473,16 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//识别车型
|
|
|
|
|
private byte[] RecognizeVehicle()
|
|
|
|
|
{
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
//使用开源AI模型识别车型
|
|
|
|
|
String result = VID_Detector.processImage(currImage);
|
|
|
|
|
ToastLog("Vehicle: " + result, false, true);
|
|
|
|
|
return encoder.GenerateCommand();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//数组转字符串,仅用于调试输出
|
|
|
|
|
private String ByteArray2String(byte[] arr)
|
|
|
|
|
{
|
|
|
|
@ -570,19 +585,47 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
context.findViewById(R.id.btn_start_qr).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("QR Code Started", false, false);
|
|
|
|
|
ToastLog("QR Result: " + ByteArray2String(RecognizeQrCode()), false, false);
|
|
|
|
|
//默认情况下使用黑白二维码识别
|
|
|
|
|
ToastLog("QR Result: " + ByteArray2String(RecognizeQrCode(false, GlobalColor.INVALIDATE)), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_red_qr).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("QR Code Started (Red)", false, false);
|
|
|
|
|
//针对彩色二维码单独测试二维码识别
|
|
|
|
|
ToastLog("QR (Red) Result: " + ByteArray2String(RecognizeQrCode(true, GlobalColor.RED)), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_green_qr).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("QR Code Started (Green)", false, false);
|
|
|
|
|
//针对彩色二维码单独测试二维码识别
|
|
|
|
|
ToastLog("QR (Green) Result: " + ByteArray2String(RecognizeQrCode(true, GlobalColor.GREEN)), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_yellow_qr).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("QR Code Started (Yellow)", false, false);
|
|
|
|
|
//针对彩色二维码单独测试二维码识别
|
|
|
|
|
ToastLog("QR (Yellow) Result: " + ByteArray2String(RecognizeQrCode(true, GlobalColor.YELLOW)), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_light).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("Traffic Light Started", false, false);
|
|
|
|
|
ToastLog("TL Result: " + ByteArray2String(RecognizeTrafficLight()), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_color_shape).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("Color Shape Started", false, false);
|
|
|
|
|
ToastLog("CS Result: " + ByteArray2String(RecognizeShapeColor()), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_car_id).setOnClickListener(view ->
|
|
|
|
@ -591,12 +634,14 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
Thread th_debug = new Thread(this::RecognizeCarID);
|
|
|
|
|
th_debug.start();
|
|
|
|
|
ToastLog("CID Finished", false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_sign).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
ToastLog("Traffic Sign Started", false, false);
|
|
|
|
|
ToastLog("TS Result: " + ByteArray2String(RecognizeTrafficSign()), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_start_ocr).setOnClickListener(view ->
|
|
|
|
@ -604,6 +649,7 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
ToastLog("OCR Started", false, false);
|
|
|
|
|
Thread th_debug = new Thread(this::OCRRecognizeText);
|
|
|
|
|
th_debug.start();
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_tft_page_down).setOnClickListener(view ->
|
|
|
|
@ -611,6 +657,7 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
CommandEncoder encoder = new CommandEncoder();
|
|
|
|
|
dtc_client.ThreadSend(encoder.GenerateCommand(Commands.TFT_PAGE_DOWN, (byte) 0, (byte) 0, (byte) 0));
|
|
|
|
|
ToastLog("TFT Page Down Command Send.", false, true);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_movement_control).setOnClickListener(view -> startActivity(new Intent(this, MovementController.class)));
|
|
|
|
@ -629,18 +676,21 @@ public class MainActivity extends AppCompatActivity
|
|
|
|
|
detector.shapePicProcess(currImage);
|
|
|
|
|
ShapeColorResult result = detector.GetAllResult();
|
|
|
|
|
ToastLog(result.toString(), false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_os_trafficsign).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
String res = TS_Detector.processImage(currImage);
|
|
|
|
|
ToastLog("Traffic Sign Result: " + res, false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
context.findViewById(R.id.btn_os_vehicle).setOnClickListener(view ->
|
|
|
|
|
{
|
|
|
|
|
String res = TS_Detector.processImage(currImage);
|
|
|
|
|
ToastLog("Vehicle Result: " + res, false, false);
|
|
|
|
|
context.finish();
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
//----------------------------------------到此处终止----------------------------------------
|
|
|
|
|