권한 확인 액티비티 추가

This commit is contained in:
DESKTOP-1A3P75F\lee
2022-09-26 03:09:59 +09:00
parent ee8f56aa89
commit 11cbc25583
113 changed files with 853 additions and 422 deletions

View File

@@ -35,6 +35,18 @@
android:theme="@style/Theme.QTagger"
android:usesCleartextTraffic="true"
tools:targetApi="31">
<activity
android:name=".Activity.PermissionChecker"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Activity.CameraActivity"
android:exported="false" />
@@ -84,13 +96,10 @@
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
android:exported="false">
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".util.SerialService" />
</application>

View File

@@ -39,6 +39,7 @@ import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.Toast;
@@ -48,6 +49,7 @@ import com.hoho.android.usbserial.driver.UsbSerialDriver;
import com.hoho.android.usbserial.driver.UsbSerialPort;
import com.hoho.android.usbserial.driver.UsbSerialProber;
import com.qtagger.CustomPalette.CameraSurfaceView;
import com.qtagger.CustomPalette.RectangleWeightCapture;
import com.qtagger.Data.CustomProber;
import com.qtagger.Data.TestEnum;
import com.qtagger.Database.ImageFile;
@@ -94,6 +96,7 @@ public class CameraActivity extends AppCompatActivity {
CameraSurfaceView surfaceView;
RelativeLayout pictureLayout;
LinearLayout saveLayout;
ProgressBar progressBar;
String dbTestType;
DataManager dataManager = DataManager.getInstance();
Bitmap resultBitmap,mOrigin;
@@ -104,6 +107,7 @@ public class CameraActivity extends AppCompatActivity {
private boolean usbChecker = false;
private enum Connected { False, Pending, True }
private Connected connected = Connected.False;
private boolean serviceChecker = false;
SerialService service;
boolean isService = false;
private boolean hexEnabled = true;
@@ -233,6 +237,7 @@ public class CameraActivity extends AppCompatActivity {
double df = f;
df = df / 10;
pkgData = String.format("%.5f", df);
progressBar.setVisibility(View.INVISIBLE);
Log.i("jjhTest!!!!!" , String.format("%.5f", df) + " μSv/hr");
}
}
@@ -353,7 +358,7 @@ public class CameraActivity extends AppCompatActivity {
Thread detectThread = new Thread() {
public void run() {
try {
Thread.sleep(1000);
//Thread.sleep(1000);
if(stopFlag)
{
stopFlag = false;
@@ -464,6 +469,8 @@ public class CameraActivity extends AppCompatActivity {
boolean octChecker;
TessBaseAPI tessBaseAPI;
List<MatOfPoint2f> new_contours;
Button button_weightAlter;
RectangleWeightCapture box;
public Mat dot;
public String ocr = "d05";
public boolean boxFlag = false;
@@ -477,6 +484,14 @@ public class CameraActivity extends AppCompatActivity {
dbTestType = intent.getStringExtra("TestType");
pkgData = intent.getStringExtra("PkgData");
tessBaseAPI = new TessBaseAPI();
imageView = findViewById(R.id.imageView);
surfaceView = findViewById(R.id.surfaceView);
pictureLayout = findViewById(R.id.layout_picture);
saveLayout = findViewById(R.id.layout_saveChecker);
button_weightAlter = findViewById(R.id.button_weightAlter);
progressBar = findViewById(R.id.capture_loading);
if(dbTestType == null)
dbTestType ="";
if(pkgData == null)
@@ -485,33 +500,16 @@ public class CameraActivity extends AppCompatActivity {
if(usbChecker)
{
usbService();
progressBar.setVisibility(View.VISIBLE);
}
octChecker = dbTestType.compareTo(TestType.Weight.name()) == 0;
tessBaseAPI = new TessBaseAPI();
imageView = findViewById(R.id.imageView);
surfaceView = findViewById(R.id.surfaceView);
pictureLayout = findViewById(R.id.layout_picture);
saveLayout = findViewById(R.id.layout_saveChecker);
if(octChecker) {
imageView.setVisibility(View.VISIBLE);
surfaceView.setVisibility(View.GONE);
AssetManager am = mContext.getAssets();
InputStream inOrigin = null;
try {
inOrigin = am.open("weight06.jpg");
} catch (IOException e) {
e.printStackTrace();
}
BitmapFactory.Options optionsOrigin = new BitmapFactory.Options();
//origin set
mOrigin = BitmapFactory.decodeStream(inOrigin, null, optionsOrigin);
imageView.setImageBitmap(mOrigin);
button_weightAlter.setVisibility(View.VISIBLE);
box = new RectangleWeightCapture(mContext);
RelativeLayout relativeLayout = findViewById(R.id.relativelayout_View);
relativeLayout.addView(box, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
}
@@ -519,6 +517,7 @@ public class CameraActivity extends AppCompatActivity {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressBar.setVisibility(View.VISIBLE);
capture();
}
});
@@ -534,7 +533,7 @@ public class CameraActivity extends AppCompatActivity {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(View v) {
saveImage();
saveImageFile();
}
});
}
@@ -549,15 +548,14 @@ public class CameraActivity extends AppCompatActivity {
}
else
{
saveImage();
saveImageFile();
}
}
return super.onKeyUp(keyCode, event);
}
private void saveImage(){
private void saveImageFile(){
if(resultBitmap != null) {
//파일 저장 및 DB입력 및 종료
saveBitmap(resultBitmap, filename);
@@ -604,6 +602,11 @@ public class CameraActivity extends AppCompatActivity {
surfaceView.setVisibility(View.GONE);
pictureLayout.setVisibility(View.GONE);
saveLayout.setVisibility(View.VISIBLE);
button_weightAlter.setVisibility(View.INVISIBLE);
if(box != null)
{
box.setVisibility(View.INVISIBLE);
}
}
else
{
@@ -611,6 +614,13 @@ public class CameraActivity extends AppCompatActivity {
surfaceView.setVisibility(View.VISIBLE);
pictureLayout.setVisibility(View.VISIBLE);
saveLayout.setVisibility(View.GONE);
if(octChecker) {
button_weightAlter.setVisibility(View.VISIBLE);
}
if(box != null)
{
box.setVisibility(View.VISIBLE);
}
}
}
@@ -618,31 +628,21 @@ public class CameraActivity extends AppCompatActivity {
public void capture(){
if(dataManager.selPkg != null)
pkgNo = dataManager.selPkg.getPKG_NO();
if(octChecker){
int width = mOrigin.getWidth();
int height = mOrigin.getHeight();
Matrix matrix = new Matrix();
Bitmap resizedBitmap = Bitmap.createBitmap(mOrigin, 0,0,width,height,matrix,true);
resizedBitmap = resizedBitmap.copy(Bitmap.Config.ARGB_8888,true);
imageAfter(resizedBitmap);
viewToggle();
if(usbChecker) {//방사능량 읽어오기 위한
if(pkgData.isEmpty())
{
Toast.makeText(mContext, "대기중입니다.", Toast.LENGTH_SHORT).show();
return;
}
else{
stopFlag = true;
}
}
else {
surfaceView.capture(new Camera.PictureCallback() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onPictureTaken(byte[] data, Camera camera) {
if(usbChecker) {//방사능량 읽어오기 위한
if(!pkgData.isEmpty())
{
stopFlag = true;
}
}
BitmapFactory.Options options = new BitmapFactory.Options();
//options.inSampleSize = 8; // 1/8사이즈로 보여주기
@@ -659,7 +659,7 @@ public class CameraActivity extends AppCompatActivity {
}
});
}
}
@@ -669,8 +669,6 @@ public class CameraActivity extends AppCompatActivity {
time = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).format(currentTime);
filename = time+ ".jpg";
Matrix matrix = new Matrix();
if(octChecker){
mOrigin = bitmap;
mOrigin = getRecognitionDigit();
@@ -698,31 +696,13 @@ public class CameraActivity extends AppCompatActivity {
String imgTitle = null;
if(dbTestType.contains("Surface")) {
if(pkgData.isEmpty()) {
imgTitle = "표면방사선량 값 : 0.04 μSv/hr";
}
else
{
imgTitle = "표면방사선량 값 : " + pkgData + " μSv/hr";
}
imgTitle = "표면방사선량 값 : " + pkgData + " μSv/hr";
}
else if(dbTestType.contains("M1")){
if(pkgData.isEmpty()) {
imgTitle = "1m방사선량 값 : 0.04 μSv/hr";
}
else{
imgTitle = "1m방사선량 값 : "+pkgData+" μSv/hr";
}
imgTitle = "1m방사선량 값 : "+pkgData+" μSv/hr";
}
else if(dbTestType.compareTo(TestType.Weight.name()) == 0){
if(pkgData.isEmpty())
{
imgTitle = "무게 : 10.9 kg";
}
else
{
imgTitle = "무게 : "+ pkgData+"kg" ;
}
imgTitle = "무게 : "+ pkgData+"kg" ;
}
else if(dbTestType.compareTo(TestType.Filling.name()) == 0){
@@ -752,10 +732,12 @@ public class CameraActivity extends AppCompatActivity {
double aspectRatio = (double) original.getHeight() / (double) original.getWidth();
int targetHeight = (int) (resizeWidth * aspectRatio);
Bitmap result = Bitmap.createScaledBitmap(original, resizeWidth, targetHeight, false);
if (result != original) {
original.recycle();
}
return result;
Bitmap result2 = Bitmap.createBitmap(result.getWidth(),result.getHeight()+180,result.getConfig());
Canvas canvas = new Canvas(result2);
canvas.drawBitmap(result,0,180,null);
original.recycle();
result.recycle();
return result2;
}
@@ -886,9 +868,8 @@ public class CameraActivity extends AppCompatActivity {
tessBaseAPI.setImage(result);
Log.i("result text", tessBaseAPI.getUTF8Text());
String str = tessBaseAPI.getUTF8Text();
//tessBaseAPI.beginDocument();
str.replace(" ", "");
str = str.replace(" ", "");
char[] ch = str.toCharArray();
if(ch.length > 0)
@@ -932,6 +913,14 @@ public class CameraActivity extends AppCompatActivity {
}
}
if(!str.isEmpty())
{
str = str.replace(".","");
StringBuffer sb = new StringBuffer(str);
sb.insert(str.length()-1,".");
str = sb.toString();
}
pkgData = str;
}

View File

@@ -0,0 +1,80 @@
package com.qtagger.Activity;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.View;
import com.qtagger.MainActivity;
import com.qtagger.R;
import com.qtagger.test;
import com.qtagger.util.CommonHelper;
public class PermissionChecker extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_permission_checker);
int writePermissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int permissionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA);
if(writePermissionCheck == PackageManager.PERMISSION_GRANTED && permissionCheck == PackageManager.PERMISSION_GRANTED)
{
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
}
findViewById(R.id.button_permissionCheck).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CommonHelper.CheckCameraPermission(PermissionChecker.this);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
boolean grantDebuedChecker = false;
for (int grant : grantResults)
{
if(grant == PackageManager.PERMISSION_DENIED)
{
grantDebuedChecker = true;
}
}
if(grantDebuedChecker)
{
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
builder.setTitle("서비스 이용 알림").setMessage("필수 권한을 허용해야\n서비스 정상 이용이 가능합니다.\n권한 요청시 반드시 허용해주세요.");
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
android.app.AlertDialog alertDialog = builder.create();
alertDialog.show();
}
else//권한 전체 부여 성공
{
startActivity(new Intent(getApplicationContext(), MainActivity.class));
finish();
}
}
}

View File

@@ -94,8 +94,8 @@ public class RfidFragment extends Fragment {
button_RfidReader = view.findViewById(R.id.button_RfidReader);
try {
//ATRfidManager.wakeUp();
//rfidReader.Reset();
rfidReader.setOperationTime(0);
ApplicationClass.rfidSetOperationTime();
//rfidReader.setOperationTime(0);
int power = rfidReader.getPower();
if(power == -1){
@@ -221,6 +221,7 @@ public class RfidFragment extends Fragment {
@Override
public void onDestroy() {
super.onDestroy();
/*
if(rfidReader.getState() == ConnectionState.Connected)
{
rfidReader.disconnect();
@@ -228,7 +229,8 @@ public class RfidFragment extends Fragment {
if(rfidReader.getAction() != ActionState.Stop)
{
rfidReader.stop();
}
rfidReader.removeEventListener();
}*/
}

View File

@@ -2,11 +2,13 @@ package com.qtagger.Activity;
import android.Manifest;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
@@ -56,8 +58,7 @@ public class TestSelectActivity extends AppCompatActivity {
dataManager.testEnum = TestEnum.발생지특성규명;
//데이터 세팅
dataManager.pkgList = dataManager.dbHelper.getAllORIGIN_CHRCT();
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
startActivity(intent);
StartSearchActivity();
}
});
@@ -66,9 +67,7 @@ public class TestSelectActivity extends AppCompatActivity {
public void onClick(View v) {
dataManager.testEnum = TestEnum.예비검사;
dataManager.pkgList = dataManager.dbHelper.getAllPREPAR_TEST();
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
startActivity(intent);
//CommonHelper.CallCamera( thisActivity,activityResultPicture);
StartSearchActivity();
}
});
@@ -79,8 +78,7 @@ public class TestSelectActivity extends AppCompatActivity {
public void onClick(View v) {
dataManager.testEnum = TestEnum.인수검사;
dataManager.pkgList = dataManager.dbHelper.getAllACCEPT_TEST();
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
startActivity(intent);
StartSearchActivity();
}
});
@@ -89,8 +87,7 @@ public class TestSelectActivity extends AppCompatActivity {
public void onClick(View v) {
dataManager.testEnum = TestEnum.처분검사;
dataManager.pkgList = dataManager.dbHelper.getAllDISPOSAL_TEST();
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
startActivity(intent);
StartSearchActivity();
}
});
@@ -103,4 +100,34 @@ public class TestSelectActivity extends AppCompatActivity {
});
}
//권한 점검 및 실행
private void StartSearchActivity(){
//연결 안됨
if(CommonHelper.ft232rChecker(this) == null){
android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(this);
builder.setTitle("미연결 알림").setMessage("USB 연결을 진행해야\n서비스 정상 이용이 가능합니다.");
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
android.app.AlertDialog alertDialog = builder.create();
alertDialog.show();
}
else if(CommonHelper.CheckUsbPermission(this))
{
Toast.makeText(this, "권한이 없습니다.", Toast.LENGTH_SHORT).show();
CommonHelper.usbDevicePermission(this);
}
else
{
Intent intent = new Intent(getApplicationContext(), SearchActivity.class);
startActivity(intent);
}
}
}

View File

@@ -0,0 +1,74 @@
package com.qtagger.CustomPalette;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.view.View;
public class RectangleWeightCapture extends View {
private Paint paint = new Paint();
private Context mContext;
private static Canvas mCanvas;
public RectangleWeightCapture(Context context) {
super(context);
mContext = context;
}
@Override
protected void onDraw(Canvas canvas) { // Override the onDraw() Method
super.onDraw(canvas);
this.mCanvas = canvas;
doRect(canvas);
}
public void doRect(Canvas canvas)
{
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
//center
int x0 = (int) (canvas.getWidth() / 2);
int y0 = (int) (canvas.getHeight() / 1.8);
int dx = (int) (canvas.getWidth() / 2.8);
int dy = (int) (canvas.getHeight() / 5.3);
//draw guide box
canvas.drawRect(x0 - dx, y0 - dy, x0 + dx, y0 + dy, paint);
}
public static Canvas getCanvas(){
return mCanvas;
}
public void doPolygon(Canvas canvas)
{
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
paint.setStrokeWidth(3);
//센터값
Point center = new Point(canvas.getWidth() / 2, (canvas.getHeight() / 2)-200);
//가운데 두개가 위 포인트, 좌우끝이 아래포인트
int x[] = new int []{0, center.x - 370, center.x + 370, canvas.getWidth()}; // 좌측하단x, 좌측상단x, 우측상단x, 우측하단x
int y[] = new int[]{canvas.getHeight()-600, center.y+170, center.y+170, canvas.getHeight()-600}; // 좌측하단y, 좌측상단y, 우측상단y, 우측하단y
Path wallpath = new Path();
wallpath.reset(); // only needed when reusing this path for a new build
wallpath.moveTo(x[0], y[0]); // used for first point
wallpath.lineTo(x[1], y[1]);
wallpath.lineTo(x[2], y[2]);
wallpath.lineTo(x[3], y[3]);
wallpath.lineTo(x[0], y[0]); // there is a setLastPoint action but i found it not to work as expected
canvas.drawPath(wallpath, paint);
}
}

View File

@@ -2,6 +2,7 @@ package com.qtagger;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.ConnectivityManager;
@@ -54,13 +55,10 @@ public class MainActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSpinner = findViewById(R.id.spinner_account);
CommonHelper.CheckCameraPermission(this);
CommonHelper.CheckUsbDevice(this);
CommonHelper.usbDevicePermission(this);
CommonHelper.FolderClear();
dataManager.dbHelper = new DBHelper(getApplicationContext());
//dataManager.barcodeScanner = ATScanManager.getInstance();
//테스트용도 나중에 삭제
findViewById(R.id.imageView).setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), test.class);
@@ -153,4 +151,5 @@ public class MainActivity extends AppCompatActivity {
super.onDestroy();
}
}

View File

@@ -11,10 +11,12 @@ import com.wsmr.lib.dev.ATRfidManager;
import com.wsmr.lib.dev.ATRfidReader;
import com.wsmr.lib.dev.ATScanManager;
import com.wsmr.lib.dev.ATScanner;
import com.wsmr.lib.dev.rfid.exception.ATRfidReaderException;
public class ApplicationClass extends Application implements Application.ActivityLifecycleCallbacks {
private static boolean isBackground;
private static boolean firstRfidSettingChecker;
private static ATRfidReader atRfidReader;
private static ATScanner bacodeScanner;
@@ -23,6 +25,7 @@ public class ApplicationClass extends Application implements Application.Activit
public void onCreate() {
super.onCreate();
isBackground = true;
firstRfidSettingChecker = true;
atRfidReader = ATRfidManager.getInstance();
bacodeScanner = ATScanManager.getInstance();
registerActivityLifecycleCallbacks(this);
@@ -36,6 +39,18 @@ public class ApplicationClass extends Application implements Application.Activit
return bacodeScanner;
}
public static void rfidSetOperationTime(){
if(firstRfidSettingChecker)
{
try {
atRfidReader.setOperationTime(0);
firstRfidSettingChecker = false;
} catch (ATRfidReaderException e) {
e.printStackTrace();
}
}
}
// 앱이 background일 때 감지
@Override
public void onTrimMemory(int level) {

View File

@@ -2,7 +2,6 @@ package com.qtagger.util;
import static android.app.Activity.RESULT_OK;
import static com.qtagger.util.DataManager.CAMERA_PERMISSIONS_REQUEST_CODE;
import static com.qtagger.util.DataManager.cameraIntent;
import android.Manifest;
@@ -44,6 +43,8 @@ public class CommonHelper {
public static String DBName = "QTagger.db";
public static String QTagger_Usb_Product_name = "FT232R USB UART";
public static int QTagger_Usb_baudRate = 9600;
public static final int CAMERA_PERMISSIONS_REQUEST_CODE = 100;
public static final int WRITE_EXTERNAL_STORAGE = 101;
// 년 기준
private final static double stdrYear = 365.2422;
// 시간 기준
@@ -62,31 +63,18 @@ public class CommonHelper {
public static boolean CheckCameraPermission(Activity activity_this)
{
int writePermissionCheck = ContextCompat.checkSelfPermission(activity_this,Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(writePermissionCheck == PackageManager.PERMISSION_DENIED)
{
if (ActivityCompat.shouldShowRequestPermissionRationale(activity_this,Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//권한 설명 필요
ActivityCompat.requestPermissions(activity_this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_PERMISSIONS_REQUEST_CODE);
} else {
ActivityCompat.requestPermissions(activity_this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE}, CAMERA_PERMISSIONS_REQUEST_CODE);
}
}
int permissionCheck = ContextCompat.checkSelfPermission(activity_this,Manifest.permission.CAMERA);
if (permissionCheck == PackageManager.PERMISSION_DENIED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity_this,Manifest.permission.CAMERA)) {
//권한 설명 필요
ActivityCompat.requestPermissions(activity_this,new String[] {Manifest.permission.CAMERA}, CAMERA_PERMISSIONS_REQUEST_CODE);
} else {
ActivityCompat.requestPermissions(activity_this,new String[] {Manifest.permission.CAMERA}, CAMERA_PERMISSIONS_REQUEST_CODE);
}
if(writePermissionCheck == PackageManager.PERMISSION_DENIED || permissionCheck == PackageManager.PERMISSION_DENIED)
{
ActivityCompat.shouldShowRequestPermissionRationale(activity_this,Manifest.permission.WRITE_EXTERNAL_STORAGE);
ActivityCompat.requestPermissions(activity_this,new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CAMERA}, WRITE_EXTERNAL_STORAGE);
}
return permissionCheck==PackageManager.PERMISSION_GRANTED?true:false;
return permissionCheck==PackageManager.PERMISSION_GRANTED && writePermissionCheck == PackageManager.PERMISSION_GRANTED;
}
public static void CheckUsbDevice(Context context){
public static void usbDevicePermission(Context context){
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
UsbSerialProber usbDefaultProber = UsbSerialProber.getDefaultProber();
for(UsbDevice v : usbManager.getDeviceList().values()) {
@@ -102,6 +90,47 @@ public class CommonHelper {
}
}
public static UsbDevice ft232rChecker(Context context){
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
UsbDevice usbDevice =null;
for(UsbDevice v : usbManager.getDeviceList().values()) {
if(v.getProductName().equals("FT232R USB UART"))
{
usbDevice = v;
break;
}
}
return usbDevice;
}
public static boolean CheckUsbPermission(Context context){
boolean ft232rPermission = false;
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
UsbSerialProber usbDefaultProber = UsbSerialProber.getDefaultProber();
UsbDevice usbDevice =null;
for(UsbDevice v : usbManager.getDeviceList().values()) {
if(v.getProductName().equals("FT232R USB UART"))
{
usbDevice = v;
break;
}
}
if(usbDevice == null)
{
ft232rPermission = true;
}
else
{
UsbSerialDriver sDriver = usbDefaultProber.probeDevice(usbDevice);
ft232rPermission = usbManager.hasPermission(sDriver.getDevice());
}
return ft232rPermission;
}
public static void CallCamera(Activity activity, ActivityResultLauncher<Intent> activityResultPicture){
boolean permission = CheckCameraPermission(activity);

View File

@@ -33,7 +33,7 @@ public class DataManager {
public static TestEnum testEnum = TestEnum.선택안함;
public static Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
public static final int CAMERA_PERMISSIONS_REQUEST_CODE = 100;
public List<PKG> pkgList;
public PKG selPkg;
//public Map<String,NuclideData> nuclideDataMap;

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 테두리 내부 색상 설정 -->
<solid android:color="#7D6200EE" />
<!-- 테두리 내부 여백 설정 -->
<padding
android:bottom="8dp"
android:left="8dp"
android:right="8dp"
android:top="8dp" />
<!-- 코너 -->
<corners
android:bottomLeftRadius="12dp"
android:bottomRightRadius="12dp"
android:topLeftRadius="12dp"
android:topRightRadius="12dp" />
<!-- 테두리 설정: 두께, 색상 -->
<stroke
android:width="1dp"
android:color="@color/purple_700" />
</shape>

View File

@@ -7,19 +7,52 @@
android:orientation="vertical"
tools:context=".Activity.CameraActivity">
<com.qtagger.CustomPalette.CameraSurfaceView
android:id="@+id/surfaceView"
<RelativeLayout
android:id="@+id/relativelayout_View"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/imageView"
android:background="@color/black"
android:visibility="gone"
android:layout_gravity="center"/>
android:layout_weight="1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:id="@+id/imageView"
android:background="@color/black"
android:layout_gravity="center"/>
<com.qtagger.CustomPalette.CameraSurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"/>
<android.widget.Button
android:id="@+id/button_weightAlter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginLeft="60dp"
android:layout_marginTop="15dp"
android:layout_marginRight="60dp"
android:background="@drawable/btn_bg_ex"
android:text="영역에 맞게 인디케이터를 배치시켜서\n촬영해주세요."
android:textAlignment="center"
android:textAllCaps="false"
android:textColor="@android:color/white"
android:textSize="14sp"
android:textStyle="bold"
android:visibility="invisible"
tools:ignore="RtlCompat" />
<ProgressBar
android:id="@+id/capture_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="280dp"
android:visibility="invisible"
android:gravity="center_horizontal|center_vertical" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_picture"
android:layout_width="match_parent"

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Activity.PermissionChecker">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1"
android:layout_marginStart="20dp"
android:layout_marginTop="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QTagger 권한 안내"
android:textStyle="bold"
android:textSize="24sp"
android:textColor="@color/black"
android:fontFamily="@font/font"
/>
<TextView
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="QTagger는 아래의 권한들을 필요로합니다\n서비스 사용 중 앱에서 요청 시 허용해주세요." />
<TextView
android:layout_marginTop="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/colorSendText"
android:textStyle="bold"
android:text="필수 접근 권한"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="⦁ 카메라"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="방폐물 사진을 촬영하여 등록해야합니다"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="⦁ 쓰기 권한"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="사진 및 데이터를 저장 관리합니다."/>
</LinearLayout>
</LinearLayout>
<android.widget.Button
android:id="@+id/button_permissionCheck"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/black"
android:text="확인"
android:textColor="@color/white"
/>
</LinearLayout>