我正在尝试在Android上关闭(杀死)应用程序(从任务管理器中划掉)时收听Beacons。
我正在使用Appcelerator Titanium 5+和使用模块https://github.com/dwk5123/android-altbeacon-module的信标。该应用程序在后台运行时运行正常,但关闭时就不一样了。我已经尝试了Altbeacon.setRunInService()方法在Titanium上创建应用程序服务,它似乎不起作用。
我也试图修改模块来实现这个http://altbeacon.github.io/android-beacon-library/background_launching.html,但我无法访问应用程序类,因为Titanium在构建过程中生成它。如果我创建一个Application类并把它放在清单上,它将覆盖我的Titanium应用程序Application类不运行
此外,在模块类"AndroidAltbeaconModuleModule"中,我试图实现bootstrapnotification接口及其方法:didDetermineStateForRegion
, didEnterRegion
和didExitRegion
。然后在onAppCreate
方法上尝试实现:
Region region = new Region("My Region", Identifier.parse(
"00000000-0000-0000-0000-000000000001"), null, null);
regionBootstrap = new RegionBootstrap(this, region);
但是this
对regionBootstrap
的构造函数不是静态的,并且得到了一个错误。
其次,我尝试创建一个非静态方法,并从模块调用此代码。它会成功地监听BootstrapNotifier事件,但如果应用程序被杀死,则不会,只会在后台监听。这是因为regionBootstrap不在应用程序类的onCreate方法中吗?我在没有扩展应用程序的情况下使用AltBeacon库检查了这个问题,并且在Activity上实现bootstrapnotification而不是Application类其中davidgyoung (Altbeacon lib的创建者)给出了一个很好的答案,但不可能(至少对我来说)在Titanium上实现。
是唯一的方法来注意信标与应用程序杀死这个应用程序的功能?我尝试了一点实现JobService和BroadcastReceiver模块,但我不是一个很好的Java/Android开发人员这可能要花很多时间。有人有其他想法吗?请分享一下=)
提前感谢!
我不是钛专家,但我有两个建议:
-
你可以做一个
Application
类,扩展由钛生成的一个,然后修改你的AndroidManifest.xml使用你的应用程序类?如果你可以这样做,你可以在你的类的onCreate
方法中构造RegionBootstrap
,然后调用super.onCreate()来执行Titanium所做的任何事情。 -
将逻辑放入"AndroidAltbeaconModuleModule"中的唯一方法是,如果该模块的代码在后台启动应用程序时立即执行(例如,在手机启动时接收RECEIVE_BOOT_COMPLETED后)。此时将没有UI。如果这确实是它的工作方式,那么它可能是可能的,但你将不得不以某种方式访问Android的
Context
对象在钛,并使用它来构建一个新的原生Java类,实现BootStrapNotifier
的所有方法。
总有其他的方法来完成这件事。RegionBootstrap
的设计使这相对无痛。如果由于Titanium的限制而无法使用它,那么您将需要从头构建它的一些功能,这无疑需要至少编写一个本地BroadcastReceiver
。