后续。。。摸索调用前置摄像头的component插件编写
周末回来,设计那边没有给出下一阶段的原型,抽空花了一天仔细研究了一下weex的component插件。
--
发现了component的特点:1.继承WXComponent<T> 在我这个外行看来,这里的T是一个View或者Layout。2.需要一个构造方法 3.需要复写protected T initComponentHostView(@NonNull Context context) 在这个方法里初始化你的视图。
--
然后研究有关Android相机预览的代码,发现大多使用SurfaceView,相机启动相关的代码也大同小异。贴上我参考的博客:
https://blog.csdn.net/yubo_725/article/details/50313489
--
这里最后,就这样瞎摸出一个插件
第一步,根据https://ask.dcloud.net.cn/article/35416配置好环境变量,新建一个Module作为插件,这里建议参考安卓离线打包:http://ask.dcloud.net.cn/article/508
直接在HBuilder-Hello项目里做,就别在UniPlugin-Hello-AS里面折腾了。
build.gradle配置仅供参考
需要注意的是compileSdkVersion 和targetSdkVersion 要与buildToolsVersion 相同,不然容易出现找不到style的那个错误,当然,如果你不报那个错,这个版本号随你喜欢就行
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar','*.aar'])
compileOnly fileTree(dir: '../app/libs', include: ['uniapp-release.aar'])
compileOnly "com.android.support:recyclerview-v7:28.+"
compileOnly "com.android.support:support-v4:28.+"
compileOnly "com.android.support:appcompat-v7:28.+"
compileOnly 'com.taobao.android:weex_sdk:0.20.0.2'
compileOnly 'com.alibaba.android:bindingx-core:1.0.3'
compileOnly 'com.alibaba.android:bindingx_weex_plugin:1.0.3'
}
package top.wsure.frontcamera;
import android.content.Context;
import android.support.annotation.NonNull;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.annotation.JSMethod;
import com.taobao.weex.bridge.JSCallback;
import com.taobao.weex.ui.action.BasicComponentData;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
import java.util.HashMap;
import java.util.Map;
public class MyCameraComponent extends WXComponent<CameraView> {
public MyCameraComponent(WXSDKInstance instance, WXVContainer parent, BasicComponentData basicComponentData) {
super(instance, parent, basicComponentData);
parent.getCSSLayoutTop();
parent.getCSSLayoutLeft();
}
public MyCameraComponent(WXSDKInstance instance, WXVContainer parent, int type, BasicComponentData basicComponentData) {
super(instance, parent, type, basicComponentData);
}
@Override
protected CameraView initComponentHostView(@NonNull Context context)
{
CameraView layout = new CameraView(context);
return layout;
}
//准备写一个获取当前图片的方法,qaq
@JSMethod
public void getData(JSCallback callback){
//Get the code for the location information .....
Map<String,String> data=new HashMap<>();
data.put("x","x");
data.put("y","y");
//notify once
callback.invoke(data);
}
}
其中的CameraView请参考博客里的,我只是删掉了一些方法并且把onPreviewFrame方法内清空了。
--
以上就是java代码。
AndroidManifest.xml内加入权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera2.full" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
这一步很关键,注册插件
{
"nativePlugins": [
{
"hooksClass": "",
"plugins": [
{
"type": "component",
"name": "ws-frontcamera",
"class": "top.wsure.frontcamera.MyCameraComponent"
}
]
},
{
"hooksClass": "uni.dcloud.io.uniplugin_stepcounter.StepCounterHookProxy"
}
]
}
这个配置文件其实要点很简单,就是name,你这里填了什么,nvue里面的标签就叫什么。
至此,插件就ok了
下面开始试一下这个插件
随便找个项目,在一个已有页面的目录里新建一个nvue文件
内容随意
加入html
<ws-frontcamera class="card" ></ws-frontcamera>
加入css
.card{
width: 750upx;
height: 350upx;
}
然后生成本地打包文件,替换安卓项目里的,运行一下,很好,前置摄像头不再是黑乎乎的了
7 个回复
wsure (作者)
后续。。。摸索调用前置摄像头的component插件编写
周末回来,设计那边没有给出下一阶段的原型,抽空花了一天仔细研究了一下weex的component插件。
--
发现了component的特点:1.继承WXComponent<T> 在我这个外行看来,这里的T是一个View或者Layout。2.需要一个构造方法 3.需要复写protected T initComponentHostView(@NonNull Context context) 在这个方法里初始化你的视图。
--
然后研究有关Android相机预览的代码,发现大多使用SurfaceView,相机启动相关的代码也大同小异。贴上我参考的博客:
https://blog.csdn.net/yubo_725/article/details/50313489
--
这里最后,就这样瞎摸出一个插件
第一步,根据https://ask.dcloud.net.cn/article/35416配置好环境变量,新建一个Module作为插件,这里建议参考安卓离线打包:http://ask.dcloud.net.cn/article/508
直接在HBuilder-Hello项目里做,就别在UniPlugin-Hello-AS里面折腾了。
build.gradle配置仅供参考
需要注意的是compileSdkVersion 和targetSdkVersion 要与buildToolsVersion 相同,不然容易出现找不到style的那个错误,当然,如果你不报那个错,这个版本号随你喜欢就行
其中的CameraView请参考博客里的,我只是删掉了一些方法并且把onPreviewFrame方法内清空了。
--
以上就是java代码。
AndroidManifest.xml内加入权限
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera2.full" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
这一步很关键,注册插件
这个配置文件其实要点很简单,就是name,你这里填了什么,nvue里面的标签就叫什么。
至此,插件就ok了
下面开始试一下这个插件
随便找个项目,在一个已有页面的目录里新建一个nvue文件
内容随意
加入html
<ws-frontcamera class="card" ></ws-frontcamera>
加入css
.card{
width: 750upx;
height: 350upx;
}
然后生成本地打包文件,替换安卓项目里的,运行一下,很好,前置摄像头不再是黑乎乎的了
程咬金3斧头
怒赞一个! 低配置手机上确实蛋疼,流畅性也差
DCloud_heavensoft
欢迎提交到插件市场
溪鱼
请问,能把webview打包进去吗
言会咸
你好,能给一份Android端和app的源代码吗?谢谢
1***@163.com
ios可以从视频流获取人脸信息吗、
原生插件开发哦 - 插件开发 | 个人接单 | 已上线多个原生插件| iOS+Android |插件定制| 主页 https://ask.dcloud.net.cn/question/91948
插件都可以实现的,有需要找我哦 Q 592944557
插件都可以实现的,有需要找我哦 Q 592944557