Обработка кнопки возврата Android в nativescvript-vue

Я пытаюсь создать приложение на nativescript-vue, содержащее аудио. У меня есть функция, которая вызывается, когда страница mounted():

this.player = new TNSPlayer();
const playerOptions = {
    audioFile: this.audioLink,
    loop: false,
    autoplay: false,
};

this.player
    .initFromUrl(playerOptions)
    .then((res) => {
        console.log(res);
    })
    .catch((err) => {
        console.log("something went wrong...", err);
    });

this.checkInterval = setInterval(() => {
    this.player.getAudioTrackDuration().then(duration => {
        // iOS: duration is in seconds
        // Android: duration is in milliseconds
        let current = this.player.currentTime
        if (isIOS) {
            duration *= 1000
            current *= 1000
        }

        this.currentTime = current;
        this.totalTime = duration;
        this.progress = Math.ceil(current / duration * 100);

        this.isPlaying = this.player.isAudioPlaying()
    });
}, 200)

Мне нужно знать, когда аудиоплеер подготовлен, чтобы я мог отобразить кнопку воспроизведения / паузы. Также мне нужно проверить событие, которое вызывается при нажатии кнопки возврата из Android.

В настоящее время мой звук продолжает воспроизводиться, даже если нажата кнопка возврата на Android. Я хочу останавливать / приостанавливать проигрывание при нажатии кнопки возврата.

Изменить: я пробовал это:

var applicationModule = require("application");
var AndroidApplication = applicationModule.android;
var activity = AndroidApplication.foregroundActivity;

activity.onBackPressed = function () {
    console.log('Back button pressed.')
};

но это вызывает ошибку onBackPressed не найдено.

TypeError: невозможно установить для свойства onBackPressed значение undefined.


person Nitish Kumar    schedule 19.06.2019    source источник


Ответы (1)


Используя Vuex, я бы попытался поместить player в хранилище, а затем остановить его внутри события, нажавшего назад.

app.js:

if (application.android) {
    application.android.on(application.AndroidApplication.activityBackPressedEvent, function() {
        // commit or dispatch stop player
    );
}
person TomG    schedule 19.06.2019
comment
Спасибо за обновление, попробовал использовать вашу концепцию. Я получаю ошибку при компиляции. - person Nitish Kumar; 19.06.2019
comment
Замена activity.onBackPressed кодом моего ответа должна работать - person TomG; 19.06.2019
comment
Подробнее о событиях жизненного цикла в документах - person Manoj; 19.06.2019