问题:
这里我们面临的问题其实是如何在前端界面调用原生Java的方法。这里我们需要使用到 Android 原生UI组件。
解决方案:
原生代码:
首先我们需要注册一个自己的原生Module:MyModules.java。
// package文件地址 必须需要按照你当前文件位置进行修改
package com.duoyun.sports;
import android.app.Application;
import android.content.Context;
import com.duoyun.sports.RNUMConfigure;
import com.duoyun.sports.MainApplication;
import com.umeng.commonsdk.UMConfigure;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
public class MyModules extends ReactContextBaseJavaModule {
private final ReactApplicationContext reactContext;
KeepLiveModule(ReactApplicationContext context) {
super(context);
this.reactContext = context;
}
@ReactMethod
private static boolean privacy = false;
// 必须包含 getName方法。
@Override
public String getName() {
return "MyModules";
}
@ReactMethod
// Callback 回调函数可以返回原生里的值给JS。
public void setPrivacy(boolean value, Callback callback) {
privacy = value;
if(privacy){
callback.invoke(null,privacy);
// UMeng 初始化
RNUMConfigure.init(reactContext, "你的appkey", "UMENG_CHANNEL_VALUE", UMConfigure.DEVICE_TYPE_PHONE, "3c49afbbfa6b73488a79eee568586c0d");
}
}
}
然后在建立一个Package文件来注册我们的Module。建立MyModulePackage.java文件:
package com.duoyun.sports;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class MyModulePackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
}
@Override
public List<NativeModule> createNativeModules(
ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new MyModule(reactContext));
return modules;
}
}
注册Package文件,在你的xxApplication.java文件getPackages方法中进行注册:
@Override
protected List<ReactPackage> getPackages() {
@SuppressWarnings("UnnecessaryLocalVariable")
List<ReactPackage> packages = new PackageList(this).getPackages();
// Packages that cannot be autolinked yet can be added manually here, for example:
// 注册Package 文件
packages.add(new MyModulePackage());
packages.add(new DplusReactPackage());
return packages;
}
到这里我们就能够在JS中调用原生的方法了:
JS端代码:
// 引入 NativeModules
import { NativeModules } from 'react-native';
const { MyModules }=NativeModules
// 在你的JS方法中调用原生方法
funcation Onclick(){
MyModules .setPrivacy(true, (err,callback) => { console.log(err,callback); });
}
至此,友盟初始化完成,能够在同意用户协议后自动统计。