编写原生模块给JS进行交互,一键加群的实现。
发表于更新于
广州
最近一直用RN开发,原生已经小半年没碰过了,需要给Rn的程序加一个一键加群的功能,以往都是用Intent来写,但是RN不支持,查了一下文档,发现有个编写原生模块进行调用的方式,就写了一个加群的模块,很简单,首先去QQ群官网拿到android版的代码【intent的】
1.编写Intent
首先创建一个类:这个是继承rn的一个连接原生的模块。实现一个getName方法,返回值就是我们以后在JS调用的函数名。
然后这个类里面的函数凡是需要在RN调用的都要加上 @ReactMethod注解。比如这里的openGroup
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| package com.poias
import 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
class OpenQQ(reactContext: ReactApplicationContext) : ReactContextBaseJavaModule() {
companion object { private lateinit var context: ReactApplicationContext }
init { context = reactContext }
override fun getName(): String {
return "Ktils"
}
@ReactMethod fun 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") try { context.startActivity(intent) return true } catch (e: Exception) { Toast.makeText(context, "未安装QQ或版本不支持,请手动添加", Toast.LENGTH_LONG).show() return false } }
}
|
2.新建一个类,加入原生包 把刚才的模块加入这个包,这个也是自定义的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package com.poias
import 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加上这个包
1 2 3 4 5 6 7 8
| @Override protected List<ReactPackage> getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List<ReactPackage> packages = new PackageList(this).getPackages(); packages.add(new KtilsPackage()); return packages; }
|
4.JS调用
1 2
| import {NativeModules} from 'react-native'; NativeModules.Ktils.openGroup()
|
好了,好久没有写过kotlin,语法都忘完了。唉
❄️2winter
ReactNative FullStack Developer
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ❄️2winter!