博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react native android 通知栏
阅读量:6819 次
发布时间:2019-06-26

本文共 3278 字,大约阅读时间需要 10 分钟。

react native android 通知栏的实现

最近参与部门用react native实践的第一个项目接近尾声,在项目中rn的Android、iOS代码复用使我越来越感觉到rn开发的优势,rn结合native的开发方法可能是将来快速开发APP的主流趋势。

最近工作中遇到一个问题就是通知栏的实现,看了下rn并没有直接说明实现通知栏的方法,加上我个人之前也没搞过native的开发,所以一直没有思路,后来结合rn原生模块的调用和Android开发文档(需科学上网)给实现了,至于iOS的实现方法看文档说是需要开发者账号,就先放放...

具体实现流程

1、创建js调用的react模块,该步骤参考react native文档

//NotificationModule.jspublic class NotificationModule extends ReactContextBaseJavaModule {    public NotificationModule(ReactApplicationContext reactContext) {        super(reactContext);    @Override    public String getName() {        return "NotificationModule";    }    @ReactMethod    public void startNotification(String title,String content){        try{            Intent intent = new Intent(getCurrentActivity(),NotificationService.class);            intent.putExtra("title",title);            intent.putExtra("content",content);            getCurrentActivity().startService(intent);        }catch(Exception e){            throw new JSApplicationIllegalArgumentException(                    "error "+e.getMessage());        }    }}
//NotificationPackage.javapublic class NotificationPackage implements ReactPackage {    @Override    public List
createNativeModules(ReactApplicationContext reactContext) { List
modules = new ArrayList<>(); modules.add(new NotificationModule(reactContext)); return modules; } @Override public List
> createJSModules() { return Collections.emptyList(); } @Override public List
createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); }}

并在MainApplication.java中加入该新建的模块。

2、创建生成通知栏的IntentService类,在该类中调用通知栏生成方法,具体参考谷歌的安卓开发文档

public class NotificationService extends IntentService {    public NotificationService() {        super("NotificationService");    }    @Override    protected void onHandleIntent(Intent intent) {        String title = intent.getStringExtra("title");        String content = intent.getStringExtra("content");        System.out.println(title+content);        NotificationCompat.Builder mBuilder =                new NotificationCompat.Builder(this)       .setSmallIcon(R.drawable.directionscar)                        .setContentTitle(title)                        .setContentText(content);        Intent resultIntent = new Intent(this, MainActivity.class);        TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);stackBuilder.addParentStack(MainActivity.class);        stackBuilder.addNextIntent(resultIntent);        PendingIntent resultPendingIntent =                stackBuilder.getPendingIntent(                        0,         PendingIntent.FLAG_UPDATE_CURRENT                );mBuilder.setContentIntent(resultPendingIntent);        NotificationManager mNotificationManager =                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);        mNotificationManager.notify(1, mBuilder.build());        stopSelf();    }}

需要注意的是:1、service生成通知后必须使用stopSelf()停止服务

;2、尽量使用Android studio自动生成service,会自动在manifest中进行配置。

具体实现思路就是通过js调用原生方法,在原生方法里创建intent,并通过intent调用service生成系统通知栏。

思路还是比较简单,主要是之前没有接触过native开发,所以一开始不清楚怎么做。通过rn快速生成APP页面,并通过与原生开发相结合的方式,可能会迎来广泛的应用。react native android 通知栏的实现就是这样,欢迎交流探讨...

转载地址:http://ujpzl.baihongyu.com/

你可能感兴趣的文章