如何将数据从服务提取到活动?

时间:2015-04-23 16:28:42

标签: android service

我正在使用我的第一个应用程序服务。我已经创建了处理GPS和其他一些东西的普通android服务。一切似乎都有效但......我不知道如何与Activity中的服务进行交互。

我的服务类包含Sub fixText() Dim i As Integer, lastRow As Integer Dim addressCol As Integer, cityCol As Integer 'Insert header row and add headers Rows(1).EntireRow.Insert Cells(1, 1).Value = "Name" Cells(1, 2).Value = "Address" Cells(1, 3).Value = "City/State" addressCol = 2 cityCol = 3 'Find the last used row lastRow = ActiveSheet.UsedRange.Rows.Count For i = 2 To lastRow If i > lastRow Then Exit For Cells(i, addressCol).Value = Cells(i, 1).Offset(1, 0).Value Cells(i, cityCol).Value = Cells(i, 1).Offset(2, 0).Value ' Delete the two rows you just copied info from Range(Cells(i + 1, 1), Cells(i + 2, 1)).EntireRow.Delete 'Get new last row lastRow = ActiveSheet.UsedRange.Rows.Count Next i End Sub 类,该类包含当前的GPS位置和其他一些变量。

User

我的目标是从活动中访问public class PxService extends Service { public static final User user; ... } 班级(或成员)。

我的服务不是绑定服务,因为我希望它在我的应用程序关闭时运行(据我所知,当应用程序未运行时绑定服务无法工作,但可能我错了)。

对此有何帮助?

1 个答案:

答案 0 :(得分:0)

您可以将用户保存在数据库中。 或者你可以实现User for User类接口Parcelable(或Serializable)并刷新意图BroadcastReciever中的用户对象:

在服务中

Intent intent = new Intent("YOUR_ACTION);
intent.putExtra("user", user);
sendBroadcast(intent);

和BroadcastReceiver

@Override
public void onReceive(Context context, Intent intent) {
    if (intent.getAction().equals("YOUR_ACTION")) {
        User user = (User) intent.getParcelableExtra("user);
    }
}

不要忘记注册你的广播记录。

这是一篇简单的文章如何使用这种方法。 http://www.truiton.com/2014/09/android-service-broadcastreceiver-example/

更新

评论此" 到目前为止我知道绑定服务在app未运行时无法正常工作,但也许我错了"。您可以使用服务方法startForeground(int id, Notification notification)

文档:

  

使此服务在前台运行,提供正在进行的服务   在此状态下向用户显示通知。默认情况下   服务是后台的,这意味着如果系统需要杀死它们   回收更多内存(例如在网络中显示大页面)   浏览器),他们可以在没有太大伤害的情况下被杀死。你可以设置它   如果查杀您的服务会对用户造成破坏,例如   如果您的服务正在执行背景音乐播放,那么用户   会注意到他们的音乐是否停止播放。