我正在考虑制作一个与Web API交互的应用程序。
要求:
- 开始下注并显示通知
- 通过开机自检将投注发送到网站。
- 结果到达后,使用结果更新 UI。
- 如果用户没有按下停止按钮,请返回#2,否则停止下注并删除通知。
- 如果应用程序已关闭或不是活动应用程序,投注仍将继续
- 如果单击通知,则显示/启动应用程序
经过大量的研究和阅读,我认为绑定前台服务可以做到这一点,但我找不到(或者我只是不明白)如何做到这一点......
以下是我的问题:
如果我做一个服务并将投注的逻辑放入其中,我的活动/应用程序将启动该服务并与之绑定。
- 如何告诉服务使用活动的初始投注数据开始投注?
- 服务如何知道应用程序何时关闭或不是屏幕上的活动应用程序?
- 服务如何更新应用的 UI?
我仍然会寻找一种可能的方法来做到这一点。我希望有人能引导我走上正确的道路。
更新
(3) 我最终使用 LocalBroadcast
从服务中向应用程序组件发出何时更新 UI 的信号。
(2)通过使用LocalBroadcast
,我认为我的服务不应该介意我的应用程序的状态。
(1)我使用Bound Service
,只是在服务上调用方法来传递数据并开始投注。
通过 Intent 将数据发送到服务:https://stackoverflow.com/a/15899750/3423468
Intent serviceIntent = new Intent(YourService.class.getName());
serviceIntent.putExtra("data", "123456");
context.startService(serviceIntent);
然后在服务覆盖OnStartCommand
方法中:
public int onStartCommand (Intent intent, int flags, int startId)
{
String userID = intent.getStringExtra("data");
return START_STICKY;//or non-sticky
}
要处理应用程序关闭事件,您可以查看此答案(从未使用过):https://stackoverflow.com/a/26882533/3423468
关于您的最后一个问题,您可以使用BroadcastReciever
将数据从服务发送到活动并更新 UI
如需进一步阅读,请查看以下链接:
- 服务教程
- 官方开发人员服务指南
- 广播接收器教程
使用 volley api。将其添加为build.gradle中的依赖项
dependencies {
compile 'com.android.support:design:+'
compile 'com.android.support:appcompat-v7:+'
compile 'com.android.volley:volley:+'
compile fileTree(dir: 'libs', include: ['*.jar'])
}