【发布时间】:2020-01-28 15:54:16
【问题描述】:
我正在构建一个紧急应用程序,其中一个功能是在摇动时打开应用程序,现在我知道该应用程序必须在后台运行。
我正在使用 cordova-background-mode 和 cordova shake 一切正常,
但是当手机在主屏幕上时(应用程序只是最小化)。 当我摇动时应用程序不会启动,但是当我通过点击其图标重新打开应用程序时,它确实显示发生了摇动事件并打开了另一个我用来测试的应用程序。
当应用在后台时,如何让它在摇动时打开应用?
这是我的代码
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));
})
});
编辑
这是我的代码,它可以工作,但问题是,如果我打开另一个应用程序,即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);
}
【问题讨论】:
-
你在使用 ionic 4 吗?
-
是的,我使用 ionic 4 和 angular 8
-
您可以集成离子电容器并构建一个插件来本地实现此资源。如果你愿意,我可以发布一个带有链接的答案,用我学到的一些知识制作你自己的插件
-
@igor 非常感谢
-
我想指出,当应用程序在后台时,应用程序确实会观察抖动,我只是在努力在后台启动我的应用程序。如果我将 options.packageName 设置为我的应用程序的包名称,那么它会打开最近打开的应用程序,但是如果我将 options.package 名称设置为等于 com.facebook.katana ,那么它可以完美运行
标签: android angular ionic-framework shake