CocosCreator系列——用安卓原生实现录音与播放功能

CocosCreator系列——用安卓原生实现录音与播放功能

正式开始这篇文章之前先啰嗦一下,写程序一定要细心细心再细心,一定要细心细心再细心,一定要细心细心再细心重要的事说三遍,其实自己一直都写好了,但是一直不成功,发现多了一个“/”,然后不报错了,不知道为什么还是没声音,why?why?why?why?why?我一脑子黑人问号脸?后来发现手机是静音模式……好吧,我都服了我自己了。
开始正文先来点掌声吧,👏👏👏为了写这个功能,花了我两天时间研究安卓,真是客户端什么都要会啊,终于在第二天即将下班之际完成这个功能了,首先是CocosCreator客户端代码,同样基于2.2.1版本,我注释写的挺详细的,不懂的可以关注我一波,私信我给你讲解一下,看js代码吧:

cc.Class({
   
    extends: cc.Component,

    properties: {
   
        luyinBtn: cc.Node,
    },

    // use this for initialization
    onLoad: function () {
   
        if (cc.sys.isNative) {
   
        	//设置用来存放录制语音的路径
            this.setStorageDir(jsb.fileUtils.getWritablePath() + "audioS/");
        }

        this.luyinBtn.on(cc.Node.EventType.TOUCH_START, this.onVoiceTouch, this);//一直按着录音
        this.luyinBtn.on(cc.Node.EventType.TOUCH_END, this.stopRecord, this);//抬起录音完成
        this.luyinBtn.on(cc.Node.EventType.TOUCH_CANCEL, this.stopRecord, this);//抬起取消录音,暂未实现,实际项目里再说吧,这个简单
    },

    setStorageDir: function (dir) {
   
        if (cc.sys.os == cc.sys.OS_ANDROID) {
   
            jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "setStorageDir", "(Ljava/lang/String;)V", dir);
        }
    },

    onVoiceTouch() {
   
        if (!cc.sys.isNative) {
   
            return;
        }
        //开始录音啦!!!!!!!
        //先清理一下旧文件
        this.clearCache("record.mp3");
        if (cc.sys.os == cc.sys.OS_ANDROID) {
   
            cc.log
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在 React Native 中使用 Android 原生实现 NFC 功能,您需要进行以下步骤: 1. 在 Android 项目中添加 NFC 权限和 Intent 过滤器。在 `AndroidManifest.xml` 文件中添加以下代码: ```xml <uses-permission android:name="android.permission.NFC" /> <application ...> <activity ...> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> </activity> </application> ``` 其中,`nfc_tech_filter.xml` 文件中可以指定要处理的 NFC 技术类型,例如: ```xml <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> </tech-list> </resources> ``` 2. 在 React Native 项目中安装 `react-native-nfc-manager` 库: ``` npm install react-native-nfc-manager --save ``` 3. 在 React Native 项目中导入 `NfcManager` 类,并编写代码: ```javascript import { NfcManager, NfcTech } from 'react-native-nfc-manager'; // 初始化 NFC 管理器 async function initNfc() { await NfcManager.start(); } // 读取 NFC 标签 async function readNfc() { try { // 检查是否支持 NFC 功能 await NfcManager.registerTagEvent(); // 等待卡片读取 const tag = await NfcManager.requestTechnology(NfcTech.Ndef); // 获取卡片数据 const payload = tag.ndefMessage[0].payload; // 转换为字符串 const data = payload.reduce((str, byte) => { return str + String.fromCharCode(byte); }, ''); console.log('NFC data:', data); } catch (error) { console.log('NFC error:', error); } finally { NfcManager.cancelTechnologyRequest().catch(() => {}); NfcManager.unregisterTagEvent().catch(() => {}); } } // 停止 NFC 管理器 async function deinitNfc() { await NfcManager.stop(); } // 在组件挂载时初始化 NFC 管理器 componentDidMount() { initNfc(); } // 在组件卸载时停止 NFC 管理器 componentWillUnmount() { deinitNfc(); } ``` 在上面的代码中,我们使用了 `NfcManager` 类的 `start()`、`registerTagEvent()`、`requestTechnology()`、`cancelTechnologyRequest()`、`unregisterTagEvent()` 和 `stop()` 方法来实现 NFC 功能。其中,`requestTechnology()` 方法可以用来等待卡片读取,并返回卡片数据。我们还使用了 `NfcTech` 类来指定要处理的 NFC 技术类型。 请注意,由于涉及到原生代码,因此在 Android 平台上需要进行额外的配置和权限获取,具体可以参考官方文档和 `react-native-nfc-manager` 库的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值