uniapp原生插件
前言
使用uniapp开发Android app时,一些特定的需求没办法实现的时候就只能开发原生插件或者uts插件去满足需求,我的需求目前uts插件没法实现,只能靠原生插件了😆
需求:拍照不保存图片到相册,uniapp的API或者h5+都没法达到目的
实践
导入离线SDK
Android 离线SDK - 正式版 | uni小程序SDK
开发插件
CameraModule
@UniJSMethod(uiThread = true)public void takePicture(JSONObject options, UniJSCallback callback) {if (mUniSDKInstance.getContext() instanceof Activity) {Activity activity = (Activity) mUniSDKInstance.getContext();mJSCallback = callback;if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, REQUEST_PERMISSION_CAMERA);return;}Intent intent = new Intent(activity, SimpleCameraActivity.class);activity.startActivityForResult(intent, REQUEST_SIMPLE_CAMERA);} else {if (callback != null) {JSONObject result = new JSONObject();result.put("code", -1);result.put("message", "Failed to get activity context");callback.invoke(result);}}}
SimpleCameraActivity
private void startCamera(SurfaceHolder holder) {try {mCamera = Camera.open(mCameraId);mCamera.setPreviewDisplay(holder);Camera.Parameters parameters = mCamera.getParameters();List<Camera.Size> supportedPreviewSizes = parameters.getSupportedPreviewSizes();Camera.Size optimalSize = getOptimalPreviewSize(supportedPreviewSizes, mSurfaceView.getWidth(), mSurfaceView.getHeight());if (optimalSize != null) {parameters.setPreviewSize(optimalSize.width, optimalSize.height);Log.d(TAG, "Preview size set to: " + optimalSize.width + "x" + optimalSize.height);}List<String> focusModes = parameters.getSupportedFocusModes();if (focusModes.contains(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);} else if (focusModes.contains(Camera.Parameters.FOCUS_MODE_AUTO)) {parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);}mCamera.setParameters(parameters);setCameraDisplayOrientation();mCamera.startPreview();mIsSafeToTakePicture = true;} catch (Exception e) {Log.e(TAG, "Error starting camera: " + e.getMessage());Toast.makeText(this, "无法启动相机: " + e.getMessage(), Toast.LENGTH_SHORT).show();setResult(RESULT_ERROR);finish();}}
调试插件
跟本地打包配置一个样,之前文章有写啦就不再赘述!
最后
通过camera api 拍照不保存到相册的问题解决啦,不过缓存的问题还需要优化,采用原生插件的话就没法本地打包,很烦的一点!😑