学习cordova-plugin-autostart插件经验

0
134

cordova-plugin-autostart项目地址:

https://github.com/ToniKorin/cordova-plugin-autostart

一开始没细看readme,直接用enable(),自启动是生效了,但打开的是app。

如果是开发一些基于android专用设备,用这种自启动方式很有效。如,银行排号机、自动售货机、早教机等等,可以开机直接启动,再加了无法退出,就可以满足多种使用场景了。

我只想启动后就在后台运行,不让用户察觉,尝试了多种方案均无法达到理想效果。

 

遂决定先读懂插件,尝试自己写。

下面这篇文章写的很好,给出了多种自启动并保持方案:

https://blog.csdn.net/crissjs/article/details/38293441

阅读源码过程中,发现了autostart插件中居然还有个enableService()函数。由于我使用的ionic,其

@ionic-native/autostart 中并没有提供enableService()接口,这个很坑。
原来插件本身是可以自启动服务的,但怎么用还是个问题,readme没有写明,还是要自己阅读源代码才行。

分析程序从main入手,分析插件也是如此,先找到其入口AutoStart.java。其中主要是使能了启动的信号接收器,没毛病。

再看config.xml,其中有其第二入口,这里第二入口自启动的入口:

其plugin中注册了几个receiver,分别是:

android.intent.action.BOOT_COMPLETED//启动完成
android.intent.action.USER_PRESENT//解锁屏幕
android.intent.action.MY_PACKAGE_REPLACED//包更新

这些动作可以触发对应函数执行

具体怎么调用的可以看cordova文档,也不深究了。

启动完成后执行的文件实际上就是BootCompletedReceiver.java中的:

再看appStarter.java,看注释就可以找到最后启动服务的代码。

其中使用到IntentService,关于IntentService可见:

https://blog.csdn.net/p106786860/article/details/17885115

这篇文章开头就很清晰的说了IntentService和普通服务的区别。

所以关键代码:

参数context为当前包名,serviceClassName为要启动的服务类名。

真相大白了,cordova-plugin-autostart可以启动服务,只要指定服务类名即可,当然你要另外写服务,这个插件里没法写。
现在的问题核心落到了,如何写一个android原生服务上了。
也许可用的资源:
https://github.com/Red-Folder/bgs-core

留下一个答复

Please enter your comment!
Please enter your name here