我在同一个应用程序中有一个activity和一个intentService。活动结束后服务必须继续运行,所以我不想绑定。我一直在谷歌搜索几个小时,找不到一个如何做到这一点的好例子。我可以启动服务并将附加内容传递给它,但现在该服务必须使用Messenger将数据发送回活动。
我读到这个过程基本上涉及...... 调用Message.obtain()来获取一个空的Message对象 用所需的任何数据填充该对象 在Messenger上调用send(),将消息作为参数提供
但我找不到任何有关如何执行此操作的代码示例。
几个帖子引用了SDK样本APIDemos中的一个messengerService示例,我有,但我找不到任何东西。 谢谢,加里
答案 0 :(得分:3)
你必须使用广播。 您可以在完成意向服务后发送广播消息。此外,您需要在活动中注册您的intentfilter(您希望在哪里接收数据)
这可能会对您有所帮助:http://www.mysamplecode.com/2011/10/android-intentservice-example-using.html
答案 1 :(得分:1)
为了记录,我会回答我自己的问题,因为它可能对其他人有用...... (我正在使用常规服务,而不是IntentService,因为它需要保持活动状态)
对于从服务接收消息的活动,它必须实例化一个处理程序......
private Handler handler = new Handler()
{
public void handleMessage(Message message)
{
Object path = message.obj;
if (message.arg1 == 5 && path != null)
{
String myString = (String) message.obj;
Gson gson = new Gson();
MapPlot mapleg = gson.fromJson(myString, MapPlot.class);
String astr = "debug";
astr = astr + " ";
}
};
};
上面的代码包含我的调试内容。该服务将消息发送给活动......
MapPlot mapleg = new MapPlot();
mapleg.fromPoint = LastGeoPoint;
mapleg.toPoint = nextGeoPoint;
Gson gson = new Gson();
String jsonString = gson.toJson(mapleg); //convert the mapleg class to a json string
debugString = jsonString;
//send the string to the activity
Messenger messenger = (Messenger) extras.get("MESSENGER");
Message msg = Message.obtain(); //this gets an empty message object
msg.arg1 = 5;
msg.obj = jsonString;
try
{
messenger.send(msg);
}
catch (android.os.RemoteException e1)
{
Log.w(getClass().getName(), "Exception sending message", e1);
}
我刚刚选择了数字5作为消息标识符。在这种情况下,我将在json字符串中传递一个复杂的类,然后在活动中重新构建它。