uts插件开发-继uniapp原生插件nativeplugins,uts插件开发可直接操作原生安卓sdk等,支持uniappx,支持源码授权价格等等-此片文章写的是基础的uts插件,原生相机拍照和回调

1.创建uts项目

2.创建uts插件cf-takepic

3.在index.uts中编写原生安卓代码,首先定义一个函数方法,在页面中看是否可引用成功

uts函数代码

/**
 * 拍照函数
 */
export const takepic=function():void{
	console.log("11111111")
}

index.vue代码

<template>
	<view class="content">
		
		<view class="text-area">
			<button @click="take">拍照</button>
		</view>
	</view>
</template>

<script>
	//引入uts插件
	import {takepic} from "../../uni_modules/cf-takepic"
	
	export default {
		
		data() {
			return {
				
			}
		},
		onLoad() {

		},
		methods: {
			take(){
				//调用uts插件函数
				takepic()
			}
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}

</style>

4.运行到手机或模拟器,成功打印111111即可视为调用uts插件成功

5.修改uts插件takepic函数,原生android唤起手机相机功能

uts代码

/**
 * 引用 Android 系统库,示例如下:
 * import { Context } from "android.content.Context";
 * [可选实现,按需引入]
 */

/* 引入 interface.uts 文件中定义的变量 */
import { MyApiOptions, MyApiResult, MyApi, MyApiSync } from '../interface.uts';

/* 引入 unierror.uts 文件中定义的变量 */
import { MyApiFailImpl } from '../unierror';
import Intent from "android.content.Intent";
import MediaStore from "android.provider.MediaStore";


/**
 * 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html
 */
/**
 * 拍照函数
 */
export const takepic=function():void{
	console.log("11111111")
	let takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	UTSAndroid.getUniActivity()!.startActivityForResult(takePictureIntent, 999);
	UTSAndroid.onAppActivityResult((requestCode : Int, resultCode : Int, data ?: Intent) => {
		if (requestCode == 999) {
			console.log("拍照回调");
		} else {
			// 别的代码发起的请求,不要处理
		}
	
	});
	
}

拍照打印日志

6.再次修改uts代码,获取图片base64,后续业务上传图片,保存图片至手机等等自行用base64处理

uts代码

/**
 * 引用 Android 系统库,示例如下:
 * import { Context } from "android.content.Context";
 * [可选实现,按需引入]
 */

/* 引入 interface.uts 文件中定义的变量 */
import { MyApiOptions, MyApiResult, MyApi, MyApiSync } from '../interface.uts';

/* 引入 unierror.uts 文件中定义的变量 */
import { MyApiFailImpl } from '../unierror';
import Intent from "android.content.Intent";
import MediaStore from "android.provider.MediaStore";
import File from "java.io.File";
import SimpleDateFormat from "java.text.SimpleDateFormat";
import Environment from "android.os.Environment";
import Uri from "android.net.Uri";
import FileProvider from "androidx.core.content.FileProvider";
import ActivityCompat from "androidx.core.app.ActivityCompat";
import Manifest from "android.Manifest";
import PackageManager from "android.content.pm.PackageManager";
import Build from "android.os.Build";
import Settings from "android.provider.Settings";
import Bundle from "android.os.Bundle";
import Bitmap from "android.graphics.Bitmap";
import ByteArrayOutputStream from "java.io.ByteArrayOutputStream";
import Base64 from "android.util.Base64";


/**
 * 更多插件开发的信息详见:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html
 */
/**
 * 拍照函数
 */
export const takepic:MyApi = function (options: MyApiOptions) {
	if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
		if (Environment.isExternalStorageManager()) {
			console.log("'storage'onCreate: ");
		} else {
			// console.log("111111"+Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION)
			let intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
			UTSAndroid.getUniActivity()!.startActivity(intent);
			return;
		}
	}
	console.log("11111111")
	let takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	//  let photoFile = createImageFile();
	//  console.log(photoFile)
	//  let  photoUri = FileProvider.getUriForFile(UTSAndroid.getAppContext()!,
	// 	                         "com.cf.take",
	// 	                         photoFile as File); 

	// takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri as Uri);
	UTSAndroid.getUniActivity()!.startActivityForResult(takePictureIntent, 999);
	UTSAndroid.onAppActivityResult((requestCode : Int, resultCode : Int, data ?: Intent) => {
		if (requestCode == 999) {
			console.log("拍照回调");
			let bundle  = data!.getExtras();
			let bitmap = bundle!.get("data") as Bitmap;
			console.log(bitmap.getAllocationByteCount());
			let outputStream = new ByteArrayOutputStream();
			//把bitmap100%高质量压缩 到 output对象里
			bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
			let base64=Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT)
			// console.log(base64)
			options.complete?.(base64 as any);
		// } else {
			// 别的代码发起的请求,不要处理
		}

	});

}

index.vue代码

<template>
	<view class="content">
		<view class="text-area">
			<button @click="take">拍照</button>
		</view>
		<view class="">
			<image :src="img"></image>
		</view>
	</view>
</template>

<script>
	//引入uts插件
	import {
		takepic
	} from "../../uni_modules/cf-takepic"

	export default {

		data() {
			return {
				img: "",
			}
		},
		onLoad() {

		},
		methods: {
			take() {
				let that = this;
				//调用uts插件函数
				takepic({
					paramA: false,
					complete(res) {
						that.img = "data:image/jpeg;base64," + res.replace(/\s+/g, '');
					}
				})
			}
		}
	}
</script>

<style>
	.content {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
	}
</style>

日志

7.插件于demo地址:获取原生相机拍照并异步返回base64图片 - DCloud 插件市场

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浮生若梦l

你的鼓励实我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值