react-native 结合原生安卓实现角标

..最近由于项目需求,需要在app中实现一个角标的功能,搜索后得知在安卓中,原生是不支持角标BadgeNumber的,ios原生的话是支持的,不过目前没有接触ios相关的东西,也就不去研究了,下面主要是在安卓上实现的。

使用到的一个开源的库。https://github.com/leolin310148/ShortcutBadger#samsung

目前所支持的机型也是说清楚了的,所以并不是所有机型都支持的。

结合react-native实现

因为那个库是安卓的库,我这个项目是rn写的,所以我得把他们结合起来,主要方法呢主要是参照官网中的rn与原始模块通信,接下来写一下步骤:

1.在rn项目中引入库

上面的github中的东西下载完成后,我试了一下,若是使用Jar包的方式引用,怎么都不行,大家可以试一试,如果ok的,可以给我留言,我们一起探讨,我的做法是把整个工程文件夹搬到我的rn项目下的android中。
项目结构:
这里写图片描述

完了之后我们有几处地方需要修改的:

1.项目中的android文件夹中的settings.gradle中加入下面
include ':ShortcutBadger'
2.还是android文件夹中的build.gradle中加入
subprojects {
    buildscript {
        repositories {
            jcenter()
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.2.3'
        }
    }
    repositories {
        jcenter()
        mavenCentral()
    }

}
3.android下的app下的build.gradle中找到dependencies,在这个配置里加入
compile project(':ShortcutBadger')

这样的话就算是把这个库引入我们的项目中了。

2.写安卓原生代码,实现与rn的通信

1.写一个类继承ReactContextBaseJavaModule
public class BadgeModule extends ReactContextBaseJavaModule {


    public BadgeModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    /**
     * 这个返回的字符串是我们js端调用时会用到的
     */
    @Override
    public String getName() {
        return "Badge";
    }

    /**
    *这个方法是我们js端调用的方法,其中的参数可以从js端传过来  如这里我们js端可以类似  Badge.showBadge(2)来调用这个方法
    */
    @ReactMethod
    public void showBadge(int badgeNum) {
        boolean success = ShortcutBadger.applyCount(getCurrentActivity(), badgeNum);
        Toast.makeText(getCurrentActivity(), "Set count=" + badgeNum + ", success=" + success, Toast.LENGTH_SHORT).show();
        System.out.println(success);
    }
}
2.写一个类实现ReactPackage注册这个module
public class BadgePackage implements ReactPackage {

    @Override
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List<NativeModule> createNativeModules(
            ReactApplicationContext reactContext) {
        List<NativeModule> modules = new ArrayList<>();
        // 这里就是自己写的module
        modules.add(new BadgeModule(reactContext));

        return modules;
    }
}
3.在MainApplication中添加package
public class MainApplication extends Application implements ReactApplication {

  // private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
  private ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }

    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
            new RCTCapturePackage(),
            new ImagePickerPackage(),
             // 注意这里,是我们的package
              new BadgePackage()
      );
    }

    @Override
    protected String getJSMainModuleName() {
      return "index";
    }
  };

  public void setReactNativeHost(ReactNativeHost reactNativeHost) {
    mReactNativeHost = reactNativeHost;
  }

  @Override
  public ReactNativeHost getReactNativeHost() {
    return mReactNativeHost;
  }

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}
然后页面上便可以调用了,调用方式:
import { NativeModules } from 'react-native';

const Badge = NativeModules.Badge;

Badge.showBadge(5);
RNPolymerPo 是一个基于 React Native 的生活类聚合实战项目,目前由于没有 MAC 设备,所以没有适配 iOS,感兴趣的可以自行适配 app 目录下相关 JS 代码即可。 获取代码与编译调试打包 如下所有步骤及说明均为 React Native Android 的 DIY,涉及命令均为 Ubuntu 环境,Windows 类推即可。 1. 获取代码及模块安装和签名配置 执行如下命令进行代码下载及模块安装: $ git clone https://github.com/yanbober/RNPolymerPo.git $ cd RNPolymerPo $ npm install //如果觉得慢可以先切换到国内 npm 镜像源再执行此命令 配置 Gradle 个人签名路径及属性: //1. 把你个人的签名 my-release-key.keystore 文件(不知道如何生成请自行搜索)放到 RNPolymerPo 工程的 android/app 文件夹下。 //2. 编辑工程的 gradle.properties 文件,添加如下的代码(注意把其中的****替换为你自己相应密码)。 MYAPP_RELEASE_STORE_FILE=my-release-key.keystore MYAPP_RELEASE_KEY_ALIAS=my-key-alias MYAPP_RELEASE_STORE_PASSWORD=***** MYAPP_RELEASE_KEY_PASSWORD=***** 2. 编译打包 APK 文件 编译生成在线快速调试 Debug 开发包,执行如下命令: $ adb reverse tcp:8081 tcp:8081 $ react-native start //开启本地 JS 服务 $ react-native run-android //新终端的 RNPolymerPo 目录下执行 编译生成 release 包,执行如下命令: $ cd android && ./gradlew assembleRelease 拓展规划 下一个版本准备做的事情: 兼容性处理; 夜间模式; 热修复及 PHP 服务端编写; 多语言切换等问题评估;
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值