Ioni c как открыть ваше приложение с помощью Shake, когда ваше приложение находится в фоновом режиме? - PullRequest
3 голосов
/ 28 января 2020

Я создаю экстренное приложение, и одна из функций - это открыть приложение при встряхивании, теперь я понимаю, что приложение должно работать в фоновом режиме.

и я использую cordova-background-mode и кордова трясут и все работает,

однако когда телефон на домашнем экране (приложение просто свернуто). приложение не запускается при встряхивании, но когда я снова открываю приложение, нажимая на его значок, оно показывает, что произошло событие встряхивания, и открывает другое приложение, которое я использую для тестирования.

Как получить это открыть приложение при встряхивании, когда приложение находится в фоновом режиме?

Вот мой код

this.platform.ready().then((e) => {
      this.backgroundMode.enable();
      this.backgroundMode.setEnabled(true);

      this.statusBar.styleDefault();
      this.splashScreen.hide();

        this.shake.startWatch().subscribe(() => {
          console.log(`watching...${e}`);
          alert('shake');
          const options: AppLauncherOptions = {
          }

           if(this.platform.is('ios')) {
             options.uri = 'fb://'
           } else {
             options.packageName = 'com.facebook.katana'
           }

           this.appLauncher.canLaunch(options).then((launch:Boolean)=>{
             if(launch){
               this.appLauncher.launch(options).then(()=>{
                 alert('Launched')
               },
               (err)=>{
                alert(JSON.stringify(err))
               })
             }else{
               alert(JSON.stringify("unable to launch app"));
             }
           },(err)=>{
             alert(JSON.stringify(err));
           })  

          });

Edit

это мой код, и он работает, однако проблема в том, что если я открою другое приложение, например whatsapp, но это может быть любое приложение, и закрою его, а затем, если я встряхну телефон, откроется последнее приложение, которое я использовал, вместо запуска моего приложения.


 startBackgroundMode(){          

    this.backgroundMode.enable();
    this.backgroundMode.overrideBackButton();           

    this.backgroundMode.on('activate').subscribe(value => {
        this.backgroundMode.disableWebViewOptimizations();  
        this.shakePhone();   
    });
}
shakePhone(){
  this.shake.startWatch().subscribe(() => {
    console.log(`watching...`);                      
    this.openApp();

    });
}
  openApp(){  

    const options: AppLauncherOptions = {
    }
    options.packageName = 'this is my app's package name'


  this.appLauncher.launch(options);

  }

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Различные API, такие как воспроизведение мультимедиа или отслеживание положения GPS в фоновом режиме, могут не работать в фоновом режиме, даже если фоновый режим активен. Чтобы исправить такие проблемы, плагин предоставляет метод для отключения большинства оптимизаций, выполняемых Android / CrossWalk.

cordova.plugins.backgroundMode.on('activate', function() {
   cordova.plugins.backgroundMode.disableWebViewOptimizations(); 
});

Примечание: вызов метода привел к увеличению ресурса и энергопотребления.

Также необходимо используйте следующее

Плагин запускает событие каждый раз, когда его статус был изменен. Это события включения, отключения, активации, деактивации и сбоя.

также необходимо проверить this.shake.startWatch () в фоновом режиме

cordova.plugins.backgroundMode.on('EVENT', function);

Чтобы удалить прослушиватели событий:

cordova.plugins.backgroundMode.un('EVENT', function); 
0 голосов
/ 06 февраля 2020

Зная, что вы используете ioni c 4, одним из способов достижения этого результата является разработка одного пользовательского плагина, но с конденсатором ioni c вместо cordova. Capacitor упростил создание ваших пользовательских плагинов и делает нативный код более доступным для тех, кто еще не выполнил никаких плагинов.

Ссылки ниже показывают, как реализовать пользовательский плагин для ios и android.
Как встроить сторонний фреймворк в пользовательский плагин для конденсатора ioni c?
Как встроить библиотеку Android (файл AAR) в плагин для конденсатора?

Я указываю это решение как альтернативу. Я знаю, что рабочая нагрузка будет намного выше, и что в проекте уже есть много плагинов Cordova.

0 голосов
/ 05 февраля 2020

Я считаю, что это не тот путь, который вы пытаетесь. Если бы вы могли использовать java для разработки своего приложения, тогда можно было бы использовать SensorManager для обнаружения сотрясения. Теперь вы работаете с ioni c, и в решении используется плагин device-motion.

Обратите внимание , что решения, подобные ioni c не так мощны, как основная среда разработки (java или kotlin с android studio), хотя они более сильны в дизайне интерфейса, поскольку используют преимущества браузерных приложений (веб-комплект) ). Поэтому вы должны учитывать ограничения браузера , поэтому использование sth вроде devicemotion EventListener может работать не во всех операционных системах.

Если Вы работаете над важным приложением, выберите главное решение, чтобы избежать ограничений.

...