使用RxJava注册Google GCM

时间:2016-01-12 07:44:00

标签: android rx-java

我想在浏览网页和RxDoc之后从AsyncTask更改为RxJava,我找不到任何解决方案。任何人都有任何想法?

 public void getRegId(){
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                String msg = "";
                try {
                    if (gcm == null) {
                        gcm = GoogleCloudMessaging.getInstance(getApplicationContext());
                    }
                    regid = gcm.register(PROJECT_NUMBER);
                    msg = "Device registered, registration ID=" + regid;
                    Log.i("GCM",  msg);

                } catch (IOException ex) {
                    msg = "Error :" + ex.getMessage();

                }
                return msg;
            }

            @Override
            protected void onPostExecute(String msg) {
                etRegId.setText(msg + "\n");
            }
        }.execute(null, null, null);
    }

2 个答案:

答案 0 :(得分:2)

以下示例说明如何使用RxJava包装方法:

    Observable.defer(new Func0<Observable<String>>() {
        @Override
        public Observable<String> call() {
            String msg = doSomeWork();
            return Observable.just(msg);
        }
    }).subscribeOn(Schedulers.computation())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<String>() {
                @Override
                public void onCompleted() {}

                @Override
                public void onError(Throwable e) {}

                @Override
                public void onNext(String msg) {
                    etRegId.setText(msg + "\n");
                }
            });

答案 1 :(得分:2)

您可以使用RxGcm

这是Google Cloud Messaging的一个包装器,可以摆脱服务配置,根据应用程序状态处理前台和后台通知。

经过一些设置后,您可以按如下方式注册设备:

    RxGcm.Notifications.register(context)
            .subscribe((token) -> //send to your server?);

我希望你觉得它很有用。