最近一直用RN开发,原生已经小半年没碰过了,需要给Rn的程序加一个一键加群的功能,以往都是用Intent来写,但是RN不支持,查了一下文档,发现有个编写原生模块进行调用的方式,就写了一个加群的模块,很简单,首先去QQ群官网拿到android版的代码【intent的】

1.编写Intent

首先创建一个类:这个是继承rn的一个连接原生的模块。实现一个getName方法,返回值就是我们以后在JS调用的函数名。

然后这个类里面的函数凡是需要在RN调用的都要加上 @ReactMethod注解。比如这里的openGroup

package com.poiasimport android.content.Intent
import android.net.Uri
import android.widget.Toast
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod/*** 打开QQ群*/class OpenQQ(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule() {companion object {private lateinit  var context: ReactApplicationContext}init {context = reactContext}override fun getName(): String {return "Ktils"}//打开QQ群@ReactMethodfun openGroup(): Boolean {val intent = Intent()val key = "4Zf-J-QomfEhRJUEIaA9XdbPr6xrYEuu"intent.data = Uri.parse("mqqopensdkapi://bizAgent/qm/qr?url=http%3A%2F%2Fqm.qq.com%2Fcgi-bin%2Fqm%2Fqr%3Ffrom%3Dapp%26p%3Dandroid%26k%3D$key")// 此Flag可根据具体产品需要自定义,如设置,则在加群界面按返回,返回手Q主界面,不设置,按返回会返回到呼起产品界面 //intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)try {context.startActivity(intent)return true} catch (e: Exception) {Toast.makeText(context, "未安装QQ或版本不支持,请手动添加", Toast.LENGTH_LONG).show()return false}}}

2.新建一个类,加入原生包 把刚才的模块加入这个包,这个也是自定义的。

package com.poiasimport android.view.View
import com.facebook.react.ReactPackage
import com.facebook.react.bridge.NativeModule
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.uimanager.ReactShadowNode
import com.facebook.react.uimanager.ViewManager
import java.util.*/*** 工具包模块*/
class KtilsPackage : ReactPackage {override fun createNativeModules(reactContext: ReactApplicationContext): MutableList<NativeModule> {return arrayListOf<NativeModule>().apply{add(OpenQQ(reactContext))}}override fun createViewManagers(reactContext: ReactApplicationContext): MutableList<ViewManager<View, ReactShadowNode<*>>> {return Collections.emptyList()}
}

3.这一步很多人在用第三方的包都用过了,在Mainapplication加上这个包

 @Overrideprotected List<ReactPackage> getPackages() {@SuppressWarnings("UnnecessaryLocalVariable")List<ReactPackage> packages = new PackageList(this).getPackages();//kotlin utils bridgepackages.add(new KtilsPackage());return packages;}

4.JS调用

import {NativeModules} from 'react-native';
NativeModules.Ktils.openGroup()

好了,好久没有写过kotlin,语法都忘完了。唉

【react-native】编写原生模块给JS进行交互,一键加群的实现。相关推荐

  1. React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块...

    尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...

  2. React Native调用原生模块

    概述 有时候App需要访问平台API,但React Native可能还没有相应的模块包装:或者你需要复用一些Java代码,而不是用Javascript重新实现一遍:又或者你需要实现某些高性能的.多线程 ...

  3. Android React Native使用原生UI组件

    Android React Native 已经将几个常用的原生组件进行了封装,比如 ScrollView 和 TextInput,但是并不是所有系统的原始组件都被封装了,因此有的时候我们不得不自己动手 ...

  4. React Native与原生的图片交互问题

    项目中的一个需求:在原生系统中调用第三方SDK识别身份证后将获取的信息和图片返回到React Native JSX页面上展示. 首先React Native与原生通信的方式可以采用CallBack 和 ...

  5. 一款由React Native编写的开源App--Gank

    一款由React Native编写的开源App–Gank iOS 效果图: Android 效果图: 更多gif图在文章末尾github链接处. 用到的第三方依赖库 redux react-redux ...

  6. 编写原生的Node.js模块

    通常,我们开发原生Node.js模块包括但不仅限于以下原因: 对性能有比较苛刻要求的应用.尽管Node.js得益于libuv,在异步I/O操作很有优势,但遇到数字计算时并不是一个很好的选择. 使用更加 ...

  7. React Native之AppRegistry模块

    我们在写react native的js的时候,在最后总会加上一段代码: AppRegistry.registerComponent('ReactDemo', () => ReactDemo); ...

  8. android ios 混合编程,React Native与原生(Android、iOS)混编,三端痛点解析

    在做RN混编项目的时候或者面试的时候经常会遇到一些问题,总结起来有以下几种: 1.过多的注册RN组件( AppRegistry.registerComponent() ); 2.从原生跳转指定的RN页 ...

  9. 使用React Native编写的一款阅读类app ———《轻松一刻》

    作者:阿钟 博客:http://blog.csdn.net/a_zhon 一款纯React Native原生代码编写的app 源码地址:https://github.com/azhon/Time 效果 ...

最新文章

  1. Android 获取手机系统信息
  2. How to Convert Array to ArrayList in Java?
  3. 地牢逃脱(BFS(广度优先搜索))
  4. 删除svn同步文件目录
  5. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
  6. (转)Android中截取当前屏幕图片
  7. 人工智能、大数据、云计算、机器学习和深度学习,主要有什么关系?
  8. show一下新模板(分享全套CSS和图片)
  9. 【prometheus API】删除指定指标数据
  10. 20145227鄢曼君《网络对抗》Web安全基础实践
  11. 前端学习(1272):Vue前端路由
  12. python机械臂仿真_基于Python的3R机器人运动仿真
  13. linux shell sleep/wait(转载)
  14. 计算机网络实训室建设设备,计算机网络技术综合实训室建设方案.doc
  15. linux安装2870无线网卡,『求助』RaLink雷凌RT2870 无线网卡怎样安装驱动?
  16. 过渡矩阵、线性变换矩阵在对应基下坐标的求法
  17. c语言中 c2059错误是,错误C2059:语法错误:'字符串'
  18. GSM网络识别参数-移动国家号(MCC)|移动网号(MNC)|位置区码(LAC)|小区识别(CI/cellid)...
  19. 【文献笔记】NOMA+D2D模型3 (D2D group)
  20. 为什么我加了过滤器然后就登不进去了_石英砂过滤器和活性炭过滤器应用区别...

热门文章

  1. java 微信小程序 校园跑腿系统
  2. 校园跑腿系统前景怎么样?
  3. java开发任务必备的工具_Web常用开发工具有哪些?常用工具推荐
  4. duplicate symbol in....
  5. 个人博客【页面插件集成】---学习09
  6. 计算机的CPU和GPU的区别,CPU 和 GPU 有什么区别
  7. 深圳英语培训班有推荐的吗?学习效果好吗?
  8. fabric搭建及环境配置
  9. ggplot报错 stat_count() can only have an x or y aesthetic
  10. 白皮书:OpenStack与容器的相遇相知(下)