【发布时间】:2014-10-07 01:54:59
【问题描述】:
使用移动 Chrome 应用 API 进行实验:(https://github.com/MobileChromeApps/mobile-chrome-apps)
我想要实现的是注册我的 chrome 警报,而不必粗暴地启动应用程序的主要活动,因为这会导致糟糕的用户体验。
挑战: 我指定了一个 chome.alarm,当我打开应用程序时它会成功注册(例如,'cca run android')。这些警报在 background.js 文件中指定,该文件在 manifest.json 文件中声明为后台脚本。
我希望这些在启动时自动注册,因此我实现了一个后台服务,并认为我可以简单地调用应用程序来注册 background.js 文件中指定的警报。但是,到目前为止,我能找到的唯一方法是通过后台服务中的 Intent 调用来启动应用程序的主要活动,如下面更详细说明的那样。
在启动时,我的后台服务只是调用:
//Launch main activity..
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.company.appname");
startActivity(LaunchIntent);
上面将应用程序启动到其主要活动中,并根据需要注册上述 chrome.alarms。快乐的时光!当然,这样做的一个巨大缺点是没有用户希望在启动时打开完整的主活动窗口。
请告知是否有一种不那么笨拙的方法可以让后台线程在启动时注册 background.js 中指定的 chrome.alarm。我不想打开应用程序的 mainActivity,但这是目前我能看到的让它们注册的唯一方法。最好不要在 Android SDK 中注册这些警报,因为我打算尽可能接近使用 Web API,并希望使用 background.js 作为钩子来做到这一点,从而使事情与 chrome Web 应用程序保持一致——作为安卓平台。
我做了什么:
一个 cca(chrome 移动网络应用程序)应用程序,它本机注册后台服务(我扩展了 BackgroundService)作为插件并将其注册为在启动时运行。这是在启动时加载应用程序的唯一“原生 android 代码”。
在启动 android 时,此后台服务会简单地发出 startActivity(LaunchIntent) 以打开应用程序。这样,我在我的 background.js 文件中指定的 chrome.alarm 就成功注册了。如果我不这样做,在我手动打开应用程序主活动之前,我在 background.js 中指定的 chrome 警报不会被注册。因此我使用 backgroundService 打开应用程序的主要活动。 这一点都不理想,我只是想以某种方式注册我的 chrome.alarms,而不必粗暴地启动应用程序的主活动窗口。
是否可以在我的 BackgroundService 中进行调用,以仅读取我的 background.js 文件中包含的 chrome.alarms 并注册触发? 感谢您的宝贵时间。
【问题讨论】:
标签: google-chrome-app cordova-chrome-app