最新要闻
- 世界今热点:AirPods Pro 2立大功!苹果占据31%真无线耳机市场
- 天天热议:网友吐槽买瓶饮料都要下载APP 网友:是我我扭头就走
- 全球热点!Chrome更新置顶横幅通知:明确不再支持Win7/8.1平台
- 环球速看:价格屠夫 小米4K双99%色域专业显示器2399元(首发3499)
- 天天快播:日本队更衣室留千纸鹤表感谢!国际足联再感谢日本球迷清理看台引热议 高素质
- 世界快讯:日产回应车机更新显示文案待定:车联网激活才可正常使用
- 手机端光追将至:Basemark推出首个移动设备光追基准测试
- 奇瑞汽车站起来了!连续6月销量超10万 破百万辆大关
- 小太阳取暖忘断电7分钟烧掉整间屋!官方科普冬季电器使用指南
- 世界焦点!买到运损保时捷女子要求退一赔三!判了:退车4S店再赔20万
- 焦点快播:吃肉最毁环境、很不环保?国外动物保护主义者抗议肉食让吃素
- “不良剧情直播”污人眼球 抖音出手:禁止虚假炒作、已处罚9万多账号
- 天天热点!醉驾男遇上碰瓷女:给五万要私了嫌贵 结果双双被拘
- 4比1送走韩国 巴西球员轮流摸罗纳尔多双腿蹭欧气 “小熊”说要继续跳舞直到决赛
- 环球微动态丨告别半斤机!小米13全系机身数据出炉:陶瓷/玻璃/素皮集齐了
- 4比1大胜韩国 巴西队赛后集体为球王贝利祈福 女儿称正从肺部感染康复
广告
手机
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
票房这么火爆,如何请视障人士“看”一场电影?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
- 票房这么火爆,如何请视障人士“看”一场电影?
家电
记录--uniapp自定义相机 自定义界面拍照录像闪光灯切换摄像头
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
因公司业务需要,需要开发水印相机功能,而项目代码用的uniapp框架,App端只能简单调用系统的相机,无法自定义界面,在此基础上,只能开发自定义插件来完成功能(自定义原生插件,即是用原生代码来编写组件实现功能,然后供uniapp项目调用),经过半个月的研究和开发,完成了这款插件,以高度自由的形式提供了开发者相机自定义界面的需求,只需要在相机界面引入这里建议宽高设置为全屏,然后在界面上自定义叠加自己的按钮文字等实现自己的界面功能,然后调用插件提供的api实现物理功能
// 拍照takePhoto(){console.error("开始拍照")// 设置水印this.$refs.cameraObj.addWaterText({"date":this.tempDateStr || "","logo":"·七彩云·|水印相机","address":(this.showAddress ? this.address:""),"time":this.tempTimeStr || "","week":this.weekDay || "","remark":(this.showRemark ? this.remark:"")});// 调用拍照apithis.$refs.cameraObj.takePhoto();},// 切换闪光灯switchFlash(){if(this.flashStatus === 0){this.flashStatus = 1;this.$refs.cameraObj.openFlash();}else{this.flashStatus = 0;this.$refs.cameraObj.closeFlash();}},// 切换摄像头switchCamera(){if(this.currentCamera === "0"){this.currentCamera = "1";this.$refs.cameraObj.openFront();}else{this.currentCamera = "0";this.$refs.cameraObj.openBack();}},
原生插件开发文档
(资料图片)
Android / IOS 原生插件都有两种类型扩展
1、Module 扩展 非 UI 的特定功能. ( 直白点说就是只注重功能 )
2、 Component 扩展 实现特别功能的 Native 控件. ( 侧重点在界面 )
比如我们想实现一个自定义的原生按钮,那就得扩展Component,因为需要有界面,而想实现一个提供各种api的插件,比如加减乘除算法等不需要界面显示,只有结果数据的,这种就可以用Module
附上链接: 前往下载插件和demo实例
一、Android原生插件的实现
首先android类继承uniapp的特殊类UniComponent
public class LuanQingCamera extends UniComponent<frameLayout>
在initComponentHostView这个固定方法返回一个组件
@Overrideprotected FrameLayout initComponentHostView(Context context) {// 我们自定义了一个FrameLayout的组件(为了方便后面扩展水印)FrameLayout frameLayout = new FrameLayout(context);// 创建一个SurfaceView用来承载摄像头预览SurfaceView surfaceView = new SurfaceView(context);// 添加到布局中frameLayout.addView(surfaceView);if (mHolder == null) {mHolder = surfaceView.getHolder();mHolder.addCallback(new SurfaceHolder.Callback() {@Overridepublic void surfaceCreated(SurfaceHolder holder) {// 检查权限 如果权限满足就将打开摄像头,初始化预览checkPermission();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}});}return frameLayout;}
申请权限,android 6.0起需一些危险权限要动态申请,因此我们在使用摄像头前申请
@UniJSMethodpublic void checkPermission() {Context mContent = mUniSDKInstance.getContext();if(mContent instanceof Activity){// 用于请求权限的列表Listpermissions = new ArrayList<>();// 判断权限是否足够的标识变量boolean isEnoughPermission = true;// 权限检查和判断模块 STARTList checkList = new ArrayList<>();checkList.add(new PermissionEntity(Manifest.permission.CAMERA,"摄像头相机权限"));checkList.add(new PermissionEntity(Manifest.permission.RECORD_AUDIO,"录音录制权限"));checkList.add(new PermissionEntity(Manifest.permission.WRITE_EXTERNAL_STORAGE,"文件读写权限"));for (PermissionEntity p : checkList){// 判断是否有权限boolean isHas = ActivityCompat.checkSelfPermission(mUniSDKInstance.getContext(), p.getPermissionName()) == PackageManager.PERMISSION_GRANTED;if (isHas) {// 已经有权限(可能用户在设置中开启了)的话就把配置中的权限状态设置为已有权限SharedData.setParam(mUniSDKInstance.getContext(),p.getPermissionName(),1);}// 权限状态: 0|无权限1|有权限2|已拒绝int status = (int) SharedData.getParam(mUniSDKInstance.getContext(),p.getPermissionName(),0);if(status == 0){// 添加到权限请求列表permissions.add(p.getPermissionName());isEnoughPermission = false;}else if(status == 2){isEnoughPermission = false;backData("receiveInfo", 2003 ,"缺少"+p.getDescribe());}}// 如果权限足够了直接初始化相机if(isEnoughPermission){initCameraOption();return;}// 权限检查和判断模块 STARTif(permissions.size() > 0){EsayPermissions.with((Activity) mContent).permission(permissions).request(new OnPermission() {@Overridepublic void hasPermission(List granted, boolean isAll) {if(isAll){initCameraOption();}else{backData("receiveInfo", 2003 ,"缺少摄像头|录制录音|文件读写权限");}}@Overridepublic void noPermission(List denied, boolean quick) {// 把已拒绝的权限记录,下次不再弹出权限申请,因为不这样做存在会被应用市场拒绝并下架的风险for (String permission : denied){// 用户拒绝SharedData.setParam(mUniSDKInstance.getContext(),permission,2);}backData("receiveInfo", 2003 ,"未授予摄像头|录制录音|文件读写权限");}});}}}
摄像头开始预览,显示可见的内容
// 开始预览@UniJSMethodpublic void startPreview() {try {if(mCameraCaptureSession != null){mCameraCaptureSession.stopRepeating();//停止之前的会话操作,准备切换到预览画面mCameraCaptureSession.close();//关闭之前的会话mCameraCaptureSession = null;}//创建预览请求mPreviewCaptureRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);// 设置自动对焦模式mPreviewCaptureRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);//设置Surface作为预览数据的显示界面mPreviewCaptureRequestBuilder.addTarget(mHolder.getSurface());//创建相机捕获会话,第一个参数是捕获数据的输出Surface列表,第二个参数是CameraCaptureSession的状态回调接口,当它创建好后会回调onConfigured方法,第三个参数用来确定Callback在哪个线程执行,为null的话就在当前线程执行mCameraDevice.createCaptureSession(Arrays.asList(mHolder.getSurface(),mImageReader.getSurface()),new CameraCaptureSession.StateCallback() {@Overridepublic void onConfigured(CameraCaptureSession session) {mCameraCaptureSession = session;try {//开始预览mPreviewCaptureRequest = mPreviewCaptureRequestBuilder.build();UniLogUtils.e("初始化开启预览");//设置反复捕获数据的请求,这样预览界面就会一直有数据显示mCameraCaptureSession.setRepeatingRequest(mPreviewCaptureRequest, null, null);} catch (CameraAccessException e) {e.printStackTrace();}}@Overridepublic void onConfigureFailed(CameraCaptureSession session) {UniLogUtils.e("预览失败");}}, null);} catch (CameraAccessException e) {e.printStackTrace();}}
执行拍照功能
@UniJSMethodpublic void takePhoto() {UniLogUtils.e("准备开始拍照");if (mCameraDevice == null) return;try {imageFileName = System.currentTimeMillis() + ".jpg";//首先我们创建请求拍照的CaptureRequestCaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE);Context context = mUniSDKInstance.getContext();if(context instanceof Activity){Activity activity = (Activity)mUniSDKInstance.getContext();//获取屏幕方向int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();//一个 CaptureRequest 除了需要配置很多参数之外,还要求至少配置一个 Surface(任何相机操作的本质都是为了捕获图像),captureBuilder.addTarget(mImageReader.getSurface());// 自动对焦//captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);//// 自动曝光开captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);\//captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);\// 这里有个坑,设置闪光灯必须先设置曝光if(flashState == 0){captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_OFF);}else{captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);}//captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON_ALWAYS_FLASH);//captureBuilder.set(CaptureRequest.FLASH_MODE, CaptureRequest.FLASH_MODE_SINGLE);captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, ORIENTATIONS.get(rotation));mCameraCaptureSession.stopRepeating();CameraCaptureSession.CaptureCallback captureCallback = new CameraCaptureSession.CaptureCallback() {@Overridepublic void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {super.onCaptureCompleted(session, request, result);UniLogUtils.e("拍照成功:");backData("takePhotoSuccess", 200 ,"ok");startPreview();}@Overridepublic void onCaptureFailed(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull CaptureFailure failure) {super.onCaptureFailed(session, request, failure);UniLogUtils.e("拍照失败:");backData("takePhotoFail", 2001 ,"拍照操作失败");}};UniLogUtils.e("开始拍照");mCameraCaptureSession.capture(captureBuilder.build(), captureCallback, null);}} catch (CameraAccessException e) {e.printStackTrace();}}
二、IOS原生插件的实现
ios端相比较,更为简单
头部文件 .h
#import#import "DCUniComponent.h"NS_ASSUME_NONNULL_BEGIN@interface LQCamera : DCUniComponent@endNS_ASSUME_NONNULL_END
.m文件实现固定函数,并返回一个组件
- (UIView *)loadView {NSLog(@"插件日志:loadView");return [UIView new];}
初始化一些摄像头参数
- (void)viewDidLoad {NSLog(@"插件日志:viewDidLoad");self.session = [[AVCaptureSession alloc] init];//创建一个AVCaptureMovieFileOutput 实例,用于将Quick Time 电影录制到文件系统self.movieOutput = [[AVCaptureMovieFileOutput alloc]init];//输出连接 判断是否可用,可用则添加到输出连接中去if ([self.session canAddOutput:self.movieOutput]){[self.session addOutput:self.movieOutput];}//拿到的图像的大小可以自行设定//AVCaptureSessionPresetHigh//AVCaptureSessionPreset320x240//AVCaptureSessionPreset352x288//AVCaptureSessionPreset640x480//AVCaptureSessionPreset960x540//AVCaptureSessionPreset1280x720//AVCaptureSessionPreset1920x1080//AVCaptureSessionPreset3840x2160self.session.sessionPreset = AVCaptureSessionPreset1920x1080;//AVCaptureStillImageOutput 实例 从摄像头捕捉静态图片self.imageOutput = [[AVCaptureStillImageOutput alloc]init];//配置字典:希望捕捉到JPEG格式的图片self.imageOutput.outputSettings = @{AVVideoCodecKey:AVVideoCodecJPEG};if ([self.session canAddOutput:self.imageOutput]) {[self.session addOutput:self.imageOutput];}\self.device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];NSError * error = nil;self.input = [AVCaptureDeviceInput deviceInputWithDevice:self.device error:&error];if (self.input) {[self.session addInput:self.input];}else{NSLog(@"Input Error:%@",error);}\//预览层的生成self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];// 直接取用本组件的bounds来做定位,因为本组件的bounds是uniapp传过来的css宽高设置过的self.previewLayer.frame = self.view.bounds; //预览层填充视图\// AVLayerVideoGravityResizeAspectFill 等比例填充,直到填充满整个视图区域,其中一个维度的部分区域会被裁剪// AVLayerVideoGravityResize 非均匀模式。两个维度完全填充至整个视图区域// AVLayerVideoGravityResizeAspect 等比例填充,直到一个维度到达区域边界self.previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;[self.view.layer addSublayer:self.previewLayer];\[self.session startRunning];}
一些固定的标注写法
/// 前端更新属性回调方法/// @param attributes 更新的属性- (void)updateAttributes:(NSDictionary *)attributes {// 解析属性if (attributes[@"showsTraffic"]) {//_showsTraffic = [DCUniConvert BOOL: attributes[@"showsTraffic"]];}}\/// 前端注册的事件会调用此方法/// @param eventName 事件名称- (void)addEvent:(NSString *)eventName {if ([eventName isEqualToString:@"mapLoaded"]) {}}\/// 对应的移除事件回调方法/// @param eventName 事件名称- (void)removeEvent:(NSString *)eventName {if ([eventName isEqualToString:@"mapLoaded"]) {}}
ios端回调原生方法
// 返回给前端的信息回调// 向前端发送事件,params 为传给前端的数据 注:数据最外层为 NSDictionary 格式,需要以 "detail" 作为 key 值- (void) returnFunc:(NSString *) func returnCode:(NSNumber *)code returnMess:(NSString *) message{NSString *imgUrl = self.imagePath ? self.imagePath : @"";NSString *vioUrl = self.videoPath ? self.videoPath : @"";\[self fireEvent:func params:@{@"detail":@{@"code":code,@"message":message,@"videoPath":vioUrl,@"imagePath":imgUrl}} domChanges:nil];}
拍照、录像[开始、停止]、闪光灯切换、摄像头镜头切换、设置水印内容等功能接口
// 下列为暴露出来的方法列表 START// 通过 WX_EXPORT_METHOD 将方法暴露给前端UNI_EXPORT_METHOD(@selector(openFlash))// 开启闪光灯- (void)openFlash {[self setFlashMode:AVCaptureFlashModeOn];}\UNI_EXPORT_METHOD(@selector(closeFlash))// 关闭闪光灯- (void)closeFlash {[self setFlashMode:AVCaptureFlashModeOff];}\UNI_EXPORT_METHOD(@selector(autoFlash))// 自动闪光灯- (void)autoFlash {[self setFlashMode:AVCaptureFlashModeAuto];}\UNI_EXPORT_METHOD(@selector(openFront))// 切换前置摄像头- (void)openFront {[self switchCamer:AVCaptureDevicePositionFront];}\UNI_EXPORT_METHOD(@selector(openBack))// 切换后置摄像头- (void)openBack {[self switchCamer:AVCaptureDevicePositionBack];}\// 通过 WX_EXPORT_METHOD 将方法暴露给前端UNI_EXPORT_METHOD(@selector(takePhoto:))// 拍照- (void)takePhoto:(NSDictionary *)options {// options 为前端传递的参数NSLog(@"IOS收到开始拍照请求");//获取连接AVCaptureConnection *connection = [self.imageOutput connectionWithMediaType:AVMediaTypeVideo];\//程序只支持纵向,但是如果用户横向拍照时,需要调整结果照片的方向//判断是否支持设置视频方向if (connection.isVideoOrientationSupported) {//获取方向值connection.videoOrientation = [self currentVideoOrientation];}\//定义一个handler 块,会返回1个图片的NSData数据id handler = ^(CMSampleBufferRef sampleBuffer,NSError *error){if (sampleBuffer != NULL) {NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:sampleBuffer];UIImage *image = [[UIImage alloc]initWithData:imageData];[self returnFunc:@"takePhotoSuccess" returnCode:@200 returnMess:@"拍照成功"];//重点:捕捉图片成功后,将图片传递出去[self saveImage:image];}else{NSLog(@"保存出错NULL sampleBuffer:%@",[error localizedDescription]);}};//捕捉静态图片[self.imageOutput captureStillImageAsynchronouslyFromConnection:connection completionHandler:handler];}UNI_EXPORT_METHOD(@selector(addWaterText:))// 添加水印- (void)addWaterText:(NSDictionary *)options{NSLog(@"接收到水印内容:%@",options);if(options[@"time"]){self.timeStr = options[@"time"];}if(options[@"date"]){self.dateStr = options[@"date"];}if(options[@"week"]){self.weekStr = options[@"week"];}if(options[@"address"]){self.addressStr = options[@"address"];}if(options[@"remark"]){self.remarkStr = options[@"remark"];}if(options[@"logo"]){self.logoStr = options[@"logo"];}}\// 停止录制UNI_EXPORT_METHOD(@selector(stopRecord))- (void)stopRecord {NSLog(@"停止录像");[self.movieOutput stopRecording];}// 开始录制UNI_EXPORT_METHOD(@selector(startRecord))- (void)startRecord {NSLog(@"开始录像");// 获取当前视频捕捉连接信息,用于捕捉视频数据配置一些核心属性AVCaptureConnection * videoConnection = [self.movieOutput connectionWithMediaType:AVMediaTypeVideo];//判断是否支持设置videoOrientation 属性。if([videoConnection isVideoOrientationSupported]){//支持则修改当前视频的方向videoConnection.videoOrientation = [self currentVideoOrientation];}//判断是否支持视频稳定 可以显著提高视频的质量。只会在录制视频文件涉及if([videoConnection isVideoStabilizationSupported]){videoConnection.enablesVideoStabilizationWhenAvailable = YES;}AVCaptureDevice *device = self.input.device;//摄像头可以进行平滑对焦模式操作。即减慢摄像头镜头对焦速度。当用户移动拍摄时摄像头会尝试快速自动对焦。if (device.isSmoothAutoFocusEnabled) {NSError *error;if ([device lockForConfiguration:&error]) {device.smoothAutoFocusEnabled = YES;[device unlockForConfiguration];}else{//[self.delegate deviceConfigurationFailedWithError:error];}}//查找写入捕捉视频的唯一文件系统URL.//self.outputURL = [self uniqueURL];NSLog(@"开始录像2");//在捕捉输出上调用方法 参数1:录制保存路径参数2:代理[self.movieOutput startRecordingToOutputFileURL:[self outPutFileURL] recordingDelegate:self];}// 下列为暴露出来的方法列表 END
到此一款包含Android+IOS两端的Uniapp原生插件完成
附上链接:前往下载插件和demo实例
效果图:
https://juejin.cn/post/7107058762673815566
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
-
世界视点!浙里办单点登陆、令牌获取用户信息
原文链接:https: blog csdn net qq_41441896 article details 124636772浙里办开发票据认证单...
来源: 记录--uniapp自定义相机 自定义界面拍照录像闪光灯切换摄像头
世界视点!浙里办单点登陆、令牌获取用户信息
【全球热闻】iOS开发证书发布证书,推送证书,描述文件的生成总集(一)
世界今热点:AirPods Pro 2立大功!苹果占据31%真无线耳机市场
天天热议:网友吐槽买瓶饮料都要下载APP 网友:是我我扭头就走
全球热点!Chrome更新置顶横幅通知:明确不再支持Win7/8.1平台
环球速看:价格屠夫 小米4K双99%色域专业显示器2399元(首发3499)
天天快播:日本队更衣室留千纸鹤表感谢!国际足联再感谢日本球迷清理看台引热议 高素质
世界快讯:日产回应车机更新显示文案待定:车联网激活才可正常使用
手机端光追将至:Basemark推出首个移动设备光追基准测试
奇瑞汽车站起来了!连续6月销量超10万 破百万辆大关
小太阳取暖忘断电7分钟烧掉整间屋!官方科普冬季电器使用指南
世界焦点!买到运损保时捷女子要求退一赔三!判了:退车4S店再赔20万
焦点快播:吃肉最毁环境、很不环保?国外动物保护主义者抗议肉食让吃素
“不良剧情直播”污人眼球 抖音出手:禁止虚假炒作、已处罚9万多账号
天天热点!醉驾男遇上碰瓷女:给五万要私了嫌贵 结果双双被拘
4比1送走韩国 巴西球员轮流摸罗纳尔多双腿蹭欧气 “小熊”说要继续跳舞直到决赛
环球微动态丨告别半斤机!小米13全系机身数据出炉:陶瓷/玻璃/素皮集齐了
4比1大胜韩国 巴西队赛后集体为球王贝利祈福 女儿称正从肺部感染康复
咖喱味越来越浓!消息称苹果调整产业链 国行iPhone/iPad印度产会变多
小米13系列海报曝光!标准版设计如何 跟Pro差别较大
环球速讯:网飞期待《狩魔猎人》新季新气象
每日焦点!开眼了!丰田为电动车推出“手动挡”结构 雷克萨斯实车跑山演示
【天天新视野】全球首发第二代骁龙8!vivo X90 Pro+开售:12+512GB顶配6999元
”摆烂模式“成牛津词典2022年度词 今天你摆烂了吗?
环球讯息:韩国球迷用7比1嘲讽巴西最后惨败 亚洲一哥孙兴慜称尽力:网友直言自取其辱
天天视点!7399买吗?AMD RX 7900XTX性能首曝光:对比4080/90结果意外
【全球时快讯】比亚迪纯电神车海豚哥伦比亚发布:405km续航、搭刀片电池
全球热文:11月新能源汽车销量再创新高:比亚迪一骑绝尘 甩远特斯拉
世界热头条丨市场仍低迷!预计2022年全球智能手机出货量下降9.1%
【独家】柯洁直播透露斥巨资进军餐饮:光装修花了1800万 品质、价位无敌
世界今热点:日本点球战2-4负克罗地亚、巴西4-1大胜韩国:亚洲球队世界杯全部出局
“侃爷”怀疑马斯克是半个中国人!本人神回应
你每天都在用的餐具 用错等于慢性“投毒”!小心这7类材料
中国人搞锂到底有多狠?美国都开始耍花招了!
天天日报丨当年那些卖伟哥的垃圾邮件:一天就能赚7000美元!
观焦点:100年前的导演拍出“摘头”特效:就问你服不服
快报:网传上海工厂将主动减产20% 特斯拉回应:不实消息
今热点:长沙一SUV高速上失控狂飙500公里引热议 刹车为何同时失灵?专家释疑
小米上一代旗舰12S Pro降至4699元!传小米13也差不多卖这价
世界微动态丨电费飙升 日本最强超算用不上起了:临时关闭30%节点
2022十佳游戏公布:第一名《战神5》
全球要闻:女子头胎生龙凤胎 2胎又生双胞胎:众网友顶礼膜拜
国服花落谁家?暴雪心血大作《暗黑破坏神4》:要正式来了
NVIDIA坐不住了:要用1年时间干掉游戏显卡市场一切乱象
天天微资讯!仅上线不到一年!字节跳动旗下阅读App识区宣布停运
连续泄露小米13真机!百万粉汽车大V公开道歉 愿意接受处罚
【世界报资讯】恒驰汽车累计被执行超1亿元 研究院曾同一天5次成老赖
【天天新视野】日本神嘴鹦鹉冲上微博热搜榜:预测日本晋级
上海一轿车冲下数十米高架:车顶塌陷、摔成铁饼
手机飞行模式将成过去时 欧盟明年允许飞机上开5G
荣耀Magic Vs推出个性化服务:手机铰链处可自定义镌刻
每日速看!小直屏+直边方向对了!小米13预约数领先Pro版:核心配置完全同步
世界信息:加码VR头显!苹果大力招募神经渲染研究人员
米粉建议小米13发布会直接说价格 魏思琪:料还有很多
妈妈带女儿在自家保时捷上作画:网友质疑
讯息:今晚油价“二连降”!92号汽油重回“7元时代”:加满少花17.5元
元旦假期还有三周时间 机票平均价格上涨30%:贵过黄金周
小米在德国推出米家烹饪机器人!看到价格我就放心了
RTX 4080被曝要降价了!可不是惧怕AMD RX 7900
天天资讯:米粉谈小米12S Ultra给他的最大印象:拍照不可思议
爱美不容易!穿错高跟鞋可能会带来身体伤害:弓形腿、骨盆前倾
全球微资讯!氢能源真是未来?丰田海拉克斯氢燃料电池版发布:坐在气罐上开
微星笔记本双12活动来袭:学生再享立减100+三期免息
天天热议:报告:特斯拉美国车主更易遭路怒症找茬 有车主一月被别八次
环球视讯!联想搭建 美国全新高性能计算机成全球史上能效最高产品
车主打开特斯拉“宠物模式” 将牧羊犬留在车内!回来一看崩溃
全球快看点丨内马尔iPhone 14 Pro大力神杯壁纸引热议:明晨或伤愈回归出战韩国队
世界今亮点!仅11kg通勤神器 九号电动滑板车跌破千元:直降600元
天天快看点丨日系车慌不慌?比亚迪进军日本:首车确认为元Plus 23万
每日速递:近10年显卡涨价多恐怖?GTX780到RTX4090/80 售价快翻一倍 NV血赚
焦点观察:合资中型轿车新敌 国产豪华红旗H6实车亮相:罕见双中置排气
焦点关注:10.3英寸大屏加持!联想YOGA Paper墨水平板开启预售:到手2699元
潮州特斯拉“失控”撞人事故进展:车主仍未拿到数据 鉴定机构不一般
世界快资讯:支持更多游戏!新版免费PS4模拟器成了:配置要求亲民
世界速读:Win10快升级!微软又为Win11铺路:用户不愿升级四大原因被指扎心
HTC:明年上半年将发布新一代的VR产品
环球微资讯!23岁姆巴佩一战刷新多项纪录 弯道超车传球:英格兰与法国会师8强
环球播报:办婚礼后发现女友“已婚” 微信发的520红包能要回来吗?法院判了
天天热讯:神舟十四号航天员乘组平安抵京 将进行全面医学检查
焦点热议:《原神》获PS年度大奖 米哈游800原石免费送:有等级限制
环球看热讯:摊上事!马斯克:如果我突然死亡 肯定不是自杀
突破100多年局限!中国科大实现非接触心电图实时监测:不用脱衣佩戴电极
今日视点:大众ID系列被曝大面积车机故障 车主维权 回应来了:已有技术解决方案
当前最新:被环保逼疯的船东们 造的船一个比一个赛博朋克
拼多多变成天猫?我感觉 这业绩多少有点变态了
每日快播:为什么只有饿死的狮子 没有饿死的老虎?晚年有啥不一样?
全球微速讯:00后女大学生做宿舍美甲月入过万:没毕业就开店、买车了
今日快看!神舟十四号返回舱呈水平状态着陆:3名航天员报告感觉良好
播报:神十四回家了!刘洋出舱挥手笑得好甜、陈东第一个在轨超200天航天员
SMS短信技术问世30周年:谷歌再次嘲讽苹果“活在90年代”
【环球新要闻】神舟十四号返回舱成功着陆!太空出差半年回家了
环球看点!玩家买到诡异的GTX Titan X卡皇:五个接口 少了仨
世界热议:三位币圈大佬先后意外去世!29岁溺亡、30岁睡死、53岁坠机
世界播报:抗衰药物有进展:丹麦科学家称人类寿命可被延长至200年
全球速递!库克约马斯克私下见面后:靠个人魅力把他征服了
【播资讯】史上最贵数字旗舰?曝小米13系列将发布:起售价4299元
加宽无勒感:大嘴猴四角裤29元3条
榴莲、山竹便宜了!水果专列开通:543吨一次拉回国
【天天报资讯】球迷看台打哈欠!这届世界杯为何这么让人昏昏欲睡:0比0场次历史第二