SMSManager (Nativescript & Angular) - Как зарегистрироваться, когда нет службы, доступной при отправке смс - PullRequest
0 голосов
/ 10 октября 2019

В данный момент мой код работает так: если я отправляю смс, он передает сигнал о том, что смс был отправлен.

Что код не делает в данный момент: если я установил свой телефон в режиме полета, но у меня все еще есть соединение Wi-Fi (я отправлю смс-информацию - номер и текст - через вызов firebase),он все еще передает, что смс был отправлен, но мой телефон на самом деле не смог доставить его. Для этого случая я хотел бы зарегистрировать тот факт, что это действительно не помогло, и объяснить, что причиной было отсутствие обслуживания (сигнала).

import { Component, OnInit } from "@angular/core";
import * as firebase from 'nativescript-plugin-firebase';
import * as utils from "tns-core-modules/utils/utils";
import * as app from "tns-core-modules/application";
import * as permissions from "nativescript-permissions";

declare var android;


@Component({
    selector: "ns-app",
    templateUrl: "app.component.html"
})
export class AppComponent implements OnInit {

    context = utils.ad.getApplicationContext();
    sent = 'messageSent';

    constructor(){}

    ngOnInit(): void {

      permissions.requestPermissions([android.Manifest.permission.SEND_SMS], "SMS Permission")
            .then(() => {
                console.log("Permission Granted");
            })
            .catch(() => {
                console.log("Permission is not allowed");
            });

        firebase.init({
            showNotifications: true,
            showNotificationsWhenInForeground: true,

            onPushTokenReceivedCallback: (token) => {
                console.log('[Firebase] onPushTokenReceivedCallback:', { token });
            },

            onMessageReceivedCallback: (message: firebase.Message) => {
                console.log('[Firebase] onMessageReceivedCallback:', { message });
                this.sendMessage(message["data"]["number"], message["data"]["text"]);
            }
        })
            .then(() => {
                console.log('[Firebase] Initialized');
            })
            .catch(error => {
                console.log('[Firebase] Initialize', { error });
            });
    }

    sendMessage(numbers, textbody) {
        let pendingIntentSent = this.pendingIntent(this.sent);
        let sms = android.telephony.SmsManager.getDefault();
        sms.sendTextMessage(numbers, null, textbody, pendingIntentSent, null);
        this.broadcastReciever(this.sent, () => {
            console.log(this.sent);
            app.android.unregisterBroadcastReceiver(this.sent);
            return;
        })
    }

    broadcastReciever(id, cb) {
        app.android.registerBroadcastReceiver(id, () => {
            cb();
        });
    }

    pendingIntent(id) {
        let intent = new android.content.Intent(id);
        return android.app.PendingIntent.getBroadcast(this.context, 0, intent, 0);
    }
}

...