|
@@ -343,13 +343,27 @@ public class MainActivity extends BaseActivity {
|
|
Log.e(TAG, "closeScan");
|
|
Log.e(TAG, "closeScan");
|
|
closeScan();
|
|
closeScan();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ @JavascriptInterface
|
|
|
|
+ public void openCamera() {
|
|
|
|
+ Log.e(TAG, "openCamera");
|
|
|
|
+ toOpenCamera();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @JavascriptInterface
|
|
|
|
+ public void closeCamera() {
|
|
|
|
+ Log.e(TAG, "closeCamera");
|
|
|
|
+ toCloseCamera();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
- private void toTakePhoto() {
|
|
|
|
- Log.e("-------->","------>toTakePhoto");
|
|
|
|
- long timeStamp = System.currentTimeMillis();
|
|
|
|
- savePath = timeStamp+".jpg";
|
|
|
|
- Log.e("-------->","111------>savePath="+savePath);
|
|
|
|
|
|
+ private void toCloseCamera() {
|
|
|
|
+ if (cameraProvider!=null){
|
|
|
|
+ cameraProvider.unbindAll();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void toOpenCamera() {
|
|
// 请求 CameraProvider
|
|
// 请求 CameraProvider
|
|
cameraProviderFuture = ProcessCameraProvider.getInstance(this);
|
|
cameraProviderFuture = ProcessCameraProvider.getInstance(this);
|
|
//检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
|
|
//检查 CameraProvider 可用性,验证它能否在视图创建后成功初始化
|
|
@@ -362,9 +376,48 @@ public class MainActivity extends BaseActivity {
|
|
// This should never be reached.
|
|
// This should never be reached.
|
|
}
|
|
}
|
|
}, ContextCompat.getMainExecutor(this));
|
|
}, ContextCompat.getMainExecutor(this));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private void toTakePhoto() {
|
|
|
|
+ Log.e("-------->","------>toTakePhoto");
|
|
|
|
+ long timeStamp = System.currentTimeMillis();
|
|
|
|
+ savePath = timeStamp+".jpg";
|
|
|
|
+
|
|
|
|
+ // 通过 ContentValues 对象设置文件名和文件类型
|
|
|
|
+ ContentValues contentValues = new ContentValues();
|
|
|
|
+ contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, savePath);
|
|
|
|
+ contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
|
|
|
|
+
|
|
|
|
+ File dir = new File(Environment.getExternalStorageDirectory() + "/camera/");
|
|
|
|
+ if (!dir.exists()) {
|
|
|
|
+ dir.mkdirs();
|
|
|
|
+ }
|
|
|
|
+ //创建文件
|
|
|
|
+ File file = new File(dir,savePath);
|
|
|
|
+ ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(file).build();
|
|
|
|
|
|
-// String photoPath = "";
|
|
|
|
-// mWebView.loadUrl("javascript:uploadPhotoPath('" + photoPath + "')");
|
|
|
|
|
|
+ imageCapture.takePicture(
|
|
|
|
+ // 第一个参数 OutputFileOptions 指定了照片保存的位置和格式等信息。
|
|
|
|
+ outputFileOptions,
|
|
|
|
+ // 第二个参数 Executor 指定了保存照片时要运行的线程。
|
|
|
|
+ ContextCompat.getMainExecutor(this),
|
|
|
|
+ // 第三个参数 OnImageSavedCallback 指定了保存照片完成后的回调函数,可以在其中进行一些提示或其他操作。
|
|
|
|
+ new ImageCapture.OnImageSavedCallback() {
|
|
|
|
+ @SuppressLint("RestrictedApi")
|
|
|
|
+ @Override
|
|
|
|
+ public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
|
|
|
|
+ Log.e("-------->","------>savePath="+outputFileResults.getSavedUri().getPath());
|
|
|
|
+ Log.e("-------->","------>保存成功");
|
|
|
|
+ Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
|
|
|
|
+ mWebView.loadUrl("javascript:uploadPhotoPath('" + outputFileOptions.getFile().getAbsolutePath() + "')");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void onError(@NonNull ImageCaptureException exception) {
|
|
|
|
+ Log.e("----------->","------->"+exception.getMessage());
|
|
|
|
+ Toast.makeText(MainActivity.this, "Error: " + exception.getMessage(), Toast.LENGTH_SHORT).show();
|
|
|
|
+ }
|
|
|
|
+ });
|
|
}
|
|
}
|
|
|
|
|
|
private void checkNet() {
|
|
private void checkNet() {
|
|
@@ -377,7 +430,6 @@ public class MainActivity extends BaseActivity {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-// String mUrl = "https://www.baidu.com/";
|
|
|
|
String mUrl = "https://dwytb.qingyaokeji.com/index.html#/";
|
|
String mUrl = "https://dwytb.qingyaokeji.com/index.html#/";
|
|
private void getUrl() {
|
|
private void getUrl() {
|
|
mWebView.loadUrl(mUrl);
|
|
mWebView.loadUrl(mUrl);
|
|
@@ -546,9 +598,7 @@ public class MainActivity extends BaseActivity {
|
|
CameraSelector cameraSelector = new CameraSelector.Builder()
|
|
CameraSelector cameraSelector = new CameraSelector.Builder()
|
|
.requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL
|
|
.requireLensFacing(CameraSelector.LENS_FACING_BACK)//CameraSelector.LENS_FACING_EXTERNAL
|
|
.build();
|
|
.build();
|
|
-
|
|
|
|
-// preview.setSurfaceProvider(previewView.getSurfaceProvider());
|
|
|
|
- // 创建一个 ImageCapture 对象,用于拍摄照片。
|
|
|
|
|
|
+// 创建一个 ImageCapture 对象,用于拍摄照片。
|
|
// 设置拍照模式为最小化延迟模式,这意味着拍照时将尽可能快地捕获图像。
|
|
// 设置拍照模式为最小化延迟模式,这意味着拍照时将尽可能快地捕获图像。
|
|
imageCapture = new ImageCapture.Builder()
|
|
imageCapture = new ImageCapture.Builder()
|
|
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
|
|
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
|
|
@@ -556,55 +606,7 @@ public class MainActivity extends BaseActivity {
|
|
cameraProvider.unbindAll();//解绑组件
|
|
cameraProvider.unbindAll();//解绑组件
|
|
cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
|
|
cameraProvider.bindToLifecycle((LifecycleOwner) this, cameraSelector, preview, imageCapture);
|
|
|
|
|
|
- // 通过 ContentValues 对象设置文件名和文件类型
|
|
|
|
- ContentValues contentValues = new ContentValues();
|
|
|
|
- contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, savePath);
|
|
|
|
- contentValues.put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg");
|
|
|
|
-
|
|
|
|
- File dir = new File(Environment.getExternalStorageDirectory() + "/camera/");
|
|
|
|
- if (!dir.exists()) {
|
|
|
|
- dir.mkdirs();
|
|
|
|
- }
|
|
|
|
- //创建文件
|
|
|
|
- File file = new File(dir,savePath);
|
|
|
|
- ImageCapture.OutputFileOptions outputFileOptions = new ImageCapture.OutputFileOptions.Builder(file).build();
|
|
|
|
- imageCapture.takePicture(
|
|
|
|
- // 第一个参数 OutputFileOptions 指定了照片保存的位置和格式等信息。
|
|
|
|
-// new ImageCapture.OutputFileOptions.Builder(
|
|
|
|
-// getContentResolver(),
|
|
|
|
-// MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
|
|
-// contentValues
|
|
|
|
-// ).build(),
|
|
|
|
- outputFileOptions,
|
|
|
|
- // 第二个参数 Executor 指定了保存照片时要运行的线程。
|
|
|
|
- ContextCompat.getMainExecutor(this),
|
|
|
|
- // 第三个参数 OnImageSavedCallback 指定了保存照片完成后的回调函数,可以在其中进行一些提示或其他操作。
|
|
|
|
- new ImageCapture.OnImageSavedCallback() {
|
|
|
|
- @SuppressLint("RestrictedApi")
|
|
|
|
- @Override
|
|
|
|
- public void onImageSaved(@NonNull ImageCapture.OutputFileResults outputFileResults) {
|
|
|
|
- Log.e("-------->","333------>savePath="+outputFileResults.getSavedUri().getPath());
|
|
|
|
-// Log.e("-------->","444------>savePath="+outputFileOptions.getFile().getAbsolutePath());
|
|
|
|
- Log.e("-------->","------>保存成功");
|
|
|
|
-// Toast.makeText(MainActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
|
|
|
|
-// Log.e("-------->","------->path="+file.getAbsolutePath());
|
|
|
|
-// Toast.makeText(MainActivity.this, "path="+savePath, Toast.LENGTH_SHORT).show();
|
|
|
|
-// Toast.makeText(MainActivity.this, "path="+getImagePath(savePath), Toast.LENGTH_SHORT).show();
|
|
|
|
-// new Handler().postDelayed(new Runnable() {
|
|
|
|
-// @Override
|
|
|
|
-// public void run() {
|
|
|
|
-// Toast.makeText(MainActivity.this, "保存路径"+getImagePath(savePath), Toast.LENGTH_SHORT).show();
|
|
|
|
- mWebView.loadUrl("javascript:uploadPhotoPath('" + outputFileOptions.getFile().getAbsolutePath() + "')");
|
|
|
|
-// }
|
|
|
|
-// }, 2000);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- @Override
|
|
|
|
- public void onError(@NonNull ImageCaptureException exception) {
|
|
|
|
- Log.e("----------->","------->"+exception.getMessage());
|
|
|
|
- Toast.makeText(MainActivity.this, "Error: " + exception.getMessage(), Toast.LENGTH_SHORT).show();
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+// preview.setSurfaceProvider(previewView.getSurfaceProvider());
|
|
}
|
|
}
|
|
|
|
|
|
public static int getStrLength(String xm){
|
|
public static int getStrLength(String xm){
|