我目前有一个意图服务来管理我的地理围栏过渡,我希望使用地理围栏ID来触发一系列事件,或者通过另一个意图启动一个活动,或者通过将相关的字符串广播到我的主要活动,以便我可以在那里完成这个过程。目前我的intentservice中的代码包含此
String fenceID = fences.get(0).getRequestId();
Log.i( fenceID, "fenceID is");
if (fenceID == Home){
Intent broadcastIntent = new Intent();
broadcastIntent.setAction(PlayerActivity.MyWebRequestReceiver.PROCESS_RESPONSE);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT);
broadcastIntent.putExtra(fenceID, fenceID);
broadcastIntent.putExtra(RESPONSE_MESSAGE, "respone");
sendBroadcast(broadcastIntent);
/* Intent mpdIntent = new Intent(this, PlayerActivity.class)
.setData(Uri.parse("http://maxmarshall.ddns.net/segments/TEST_dash.mpd"))
.putExtra(PlayerActivity.CONTENT_ID_EXTRA, "my test")
.putExtra(PlayerActivity.CONTENT_TYPE_EXTRA, 0);
startActivity(mpdIntent);*/
}
您可以看到注释掉的代码是我最初的想法或最终目标(无论是通过此设置还是通过其他活动完成
然而,即使fenceID是Home,我也没有通过此设置得到任何响应。任何人都可以了解我在这里做错了什么吗?如果有人需要,我可以用更多代码更新问题。也许我没有正确地注册我的广播接收器,如果我需要把它放在清单中?无论如何,非常感谢任何和所有的帮助!
答案 0 :(得分:1)
您无法在同一任务中从Activity
上下文中启动新的Service
。从那里开始Activity
的唯一方法是使用标记FLAG_ACTIVITY_NEW_TASK
。在实现之前确保确实需要它。
您发送广播消息的代码看起来很好。只需确保正确注册您的接收器并且IntentFilter
匹配。
另外,永远不要这样做:
String fenceID = fences.get(0).getRequestId();
Log.i( fenceID, "fenceID is");
if (fenceID == Home){
fenceId
是String
,即它是Object
。只有当两个引用都指向同一个对象时,与==
进行比较才会显示true
。在这种情况下,这真的是你想要的吗?如果要比较字符而不是对象,请使用fenceId.equals(Home)
。
我的猜测是你的代码永远不会被执行因为这种情况下的错误。