【Unity】Unity中调用手机的震动功能 包括安卓和IOS
直接上代码
#if UNITY_IOS[DllImport("__Internal")]private static extern void EX_C_CallVibrateE(int eID);
#endif public static void CallVibrate(int eID){
#if UNITY_EDITOR#elif UNITY_ANDROIDlong miSec = 30;if(eID == 1520){miSec = 60;}//通过报名获取java classAndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//获取当前的activityvar activity = jc.GetStatic<AndroidJavaObject>("currentActivity");var service = new AndroidJavaClass("android.app.Service");var s = service.GetStatic<string>("VIBRATOR_SERVICE");var vib = activity.Call<AndroidJavaObject>("getSystemService", s);vib.Call("vibrate", miSec);#elif UNITY_IOSEX_C_CallVibrateE(eID);
#endif}
这是我的方法 对应到ios平台和安卓平台 其中eID = 1520表示长震动,为1519为短震动
在打包发布安卓平台时,需要申请一下安卓的震动权限,其他不需设置
申请方法:在Android的打包文件的AndroidManifest中添加
<uses-permission android:name="android.permission.VIBRATE" /> 即可
在打包发布Ios平台时,需要在Assets\Plugins\IOS目录下添加一个.m文件,供c#代码调用
代码如下,可根据自身需求删除不必要的方法
#import <Foundation/Foundation.h>
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AudioToolbox/AudioToolbox.h>
#include <sys/param.h>
#include <sys/mount.h>
#ifdef __cplusplus
extern "C"
{
#endif
bool CanOpenURL(char* name)
{NSURL *appURL = [NSURL URLWithString:[NSString stringWithUTF8String:name]];if ([[UIApplication sharedApplication] canOpenURL:appURL]){return YES;}else{return NO;}
}void GotoAppSetting()
{NSURL *settingURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];if([[UIApplication sharedApplication] canOpenURL:settingURL]){[[UIApplication sharedApplication] openURL:settingURL];}
}
long getFreeSpace() {NSDictionary *systemAttributes = [[NSFileManager defaultManager] fileSystemAttributesAtPath:NSHomeDirectory()];NSString *diskTotalSize = [systemAttributes objectForKey:@"NSFileSystemSize"];NSLog(@"totalspace:%@ B", diskTotalSize);NSLog(@"totalspace:%.2f GB", [diskTotalSize floatValue]/1024/1024/1024);NSString *diskFreeSize = [systemAttributes objectForKey:@"NSFileSystemFreeSize"];NSLog(@"freespace:%@ B", diskFreeSize);NSLog(@"freespace:%.2f GB", [diskFreeSize floatValue]/1024/1024/1024);return [diskFreeSize longLongValue]/(1024 *1024);}bool canAttPopup()
{if (@available(iOS 14, *)){return [ATTrackingManager trackingAuthorizationStatus] == ATTrackingManagerAuthorizationStatusNotDetermined;}return false;
}void EX_C_ATTAuthorize()
{if (@available(iOS 14.0, *)){[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {NSLog(@"ATTrackingManagerStatus: %d", (int)status);if(ATTrackingManagerAuthorizationStatusAuthorized == status){//[FBAdSettings setAdvertiserTrackingEnabled:YES];}UnitySendMessage("GameManager", "OnATTAuthStatus", [[NSString stringWithFormat:@"%d", (int)status] UTF8String]);}];}
}int EX_C_UserInterfaceStyle()
{if (@available(iOS 14.0, *)){return (int)[[[UIScreen mainScreen] traitCollection] userInterfaceStyle];}return 0;
}void EX_C_CallVibrateE(int eID){AudioServicesPlaySystemSound(eID);}#ifdef __cplusplus
}
#endif相关文章:
【Unity】Unity中调用手机的震动功能 包括安卓和IOS
直接上代码 #if UNITY_IOS[DllImport("__Internal")]private static extern void EX_C_CallVibrateE(int eID); #endif public static void CallVibrate(int eID){ #if UNITY_EDITOR#elif UNITY_ANDROIDlong miSec 30;if(eID 1520){miSec 60;}//通过报名获取ja…...
【软件工程】软件工程入门
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀软件开发必练内功_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…...
命名空间std, using namespace std
命名空间std,using namespace std 在标准C以前,都是用#include<iostream.h>这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C引入了名字空间的概念,并把iostream等标准库中的东东封装到了std名字空间中&#x…...
人工智能:未来生活与工作的变革者
随着人工智能(AI)技术的迅猛发展,越来越多的领域开始受益于AI的强大功能。从医疗、企业管理到日常生活,人工智能正在改变我们的世界。本文将深入探讨人工智能技术的应用前景,并分析它如何从根本上改变我们的生活和工作…...
SEO基础:什么是LSI关键词?【百度SEO优化专家】
SEO基础:什么是LSI关键词? 大家好,我是林汉文(百度SEO优化专家),在SEO(搜索引擎优化)中,LSI关键词是一个重要的概念,有助于提升网页的相关性和内容质量。那么…...
将理论付诸实践:如何通过实际项目有效学习和应用新技术
文章目录 摘要引言选择合适实践对象理论知识的转化遇到的挑战及解决方法挑战1:组件状态管理的复杂性挑战2:Node.js异步编程的复杂性 实践过程中的经验和心得将理论知识转化为操作能力QA环节总结未来展望参考资料 摘要 在技术的不断进步和变化的环境中&a…...
【R + Python】iNaturalist 网站图片下载 inat api
文章目录 一、iNaturalist 简介二、R语言API:rinat三、示例3.1 获取观测数据3.2 绘制可视化图像函数用法 3.4 在区域网格中搜索3.5 下载图片3.51 提取图片 url3.52 下载图片: R语言3.53 下载图片: python 四、获取详细rinat包的文档 一、iNaturalist 简介 …...
C#与Sqlite数据库
1,一般的访问方式。 1.1,连接语句。 //sqlite 连接,支持相对位置,也支持绝对位置 Data Source../../Database/cater.db// 连接数据库,FailIfMissingfalse时若文件不存在会自动创建 string connStr "DataSourcetest.db;Vers…...
2019年计算机网络408真题解析
第一题: 解析:OSI参考模型第5层完成的功能 首先,我们需要对OSI参考模型很熟悉:从下到上依次是:物理层-数据链路层-网络层- 运输层-会话层-表示层-应用层,由此可知,题目要问的是会话层的主要功能…...
江协科技STM32学习- P21 ADC模数转换器
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
[RK3566-Android11] 使用SPI方式点LED灯带-JE2815/WS2812,实现呼吸/渐变/随音量变化等效果
问题描述 之前写了一篇使用GPIO方式点亮LED灯带的文章 https://blog.csdn.net/jay547063443/article/details/134688745?fromshareblogdetail&sharetypeblogdetail&sharerId134688745&sharereferPC&sharesourcejay547063443&sharefromfrom_link 使用GPIO…...
PostgreSQL用load语句加载插件
文章目录 1. LOAD 语法2. 用途3. 示例4. 注意事项5. 其他相关命令6. 总结 在 PostgreSQL 中,LOAD 主要用于加载共享库,通常用于扩展功能或性能优化。以下是一些有关 LOAD 语句和 PostgreSQL 中的加载操作的关键信息: 1. LOAD 语法 LOAD 语句…...
一文了解:增强图像搜索之图像嵌入
图像嵌入在现代计算机视觉领域扮演着明星角色,它使得计算机能够像人类一样识别出各种各样的图像。由于计算机只能处理数字信息,我们需要将图像转换成数字向量,并存储在向量数据库中,这样就能迅速地检索到它们。 谈到嵌入技术&…...
yolov9目标检测/分割预测报错AttributeError: ‘list‘ object has no attribute ‘device‘常见汇总
这篇文章主要是对yolov9目标检测和目标分割预测测试时的报错,进行解决方案。 在说明解决方案前,严重投诉、吐槽一些博主发的一些文章,压根没用的解决方法,也不知道他们从哪里抄的,误人子弟、浪费时间。 我在解决前&…...
格姗知识圈博客网站开源了!
格姗知识圈博客 一个基于 Spring Boot、Spring Security、Vue3、Element Plus 的前后端分离的博客网站!本项目基本上是小格子一个人开发,由于工作和个人能力原因,部分技术都是边学习边开发,特别是前端(工作中是后端开…...
【C++】深入理解C++中的类型推导:从auto到decltype的应用与实践
C11引入了类型推导特性,旨在简化代码并提升开发效率。类型推导使开发者无需显式指定变量的类型,从而让代码更具可读性和灵活性。本文深入探讨了C11引入的auto、decltype和decltype(auto)等关键特性,通过分析其背后的设计理念、实际应用场景&a…...
使用Prometheus对微服务性能自定义指标监控
背景 随着云计算和容器化技术的不断发展,微服务架构逐渐成为现代软件开发的主流趋势。微服务架构将大型应用程序拆分成多个小型、独立的服务,每个服务都可以独立开发、部署和扩展。这种架构模式提高了系统的可伸缩性、灵活性和可靠性,但同时…...
深入解析 Lombok 的实现原理:以 @Builder 为例的实战演示(三)
文章目录 Lombok 的实现原理概述以 Builder 为例:解析 Lombok 如何生成 Builder 模式示例代码:没有 Lombok 的 Builder 模式使用 Lombok 的 Builder 简化代码 Lombok 如何实现 Builder:源码解析案例演示:自定义构造逻辑Lombok 的代…...
SEO基础:什么是SERP?【百度SEO专家】
SEO基础:什么是SERP? 大家好,我是林汉文(百度SEO专家),在进行SEO(搜索引擎优化)时,理解SERP是一个非常重要的基础概念。那么,究竟什么是SERP呢?本…...
HTML5教程(一)- 网页与开发工具
1. 什么是网页 网页 基于浏览器阅读的应用程序,是数据(文本、图像、视频、声音、链接等)展示的载体常见的是以 .html 或 .htm 结尾的文件 网站 使用 HTML 等制作的用于展示特定内容相关的网页集合。 2. 网页的组成 浏览器 代替用户向服务…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
