IntentService 启动意图或广播消息?
IntentService to start intent or broadcast message?
我目前有一个管理我的地理围栏转换的意图服务,我希望使用地理围栏 ID 触发一系列事件,方法是通过另一个意图启动 activity 或广播相关字符串到我的主要activity,这样我就可以在那里完成这个过程。目前我的 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);*/
}
你可以看到注释掉的代码是我最初的想法或最终目标(无论是通过这个设置还是在另一个activity
然而,即使 fenceID 是主页,我也没有收到任何对此设置的响应。谁能阐明我在这里做错了什么?如果有人需要,我可以用更多代码更新问题。如果我需要在清单中放入一些东西,也许我没有正确注册我的广播接收器?无论如何,非常感谢您提供的所有帮助!
您不能在同一任务中从 Service
上下文开始新的 Activity
。从那里启动 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)
。
我的猜测是,由于条件中的这个错误,您的代码从未执行过。
我目前有一个管理我的地理围栏转换的意图服务,我希望使用地理围栏 ID 触发一系列事件,方法是通过另一个意图启动 activity 或广播相关字符串到我的主要activity,这样我就可以在那里完成这个过程。目前我的 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);*/
}
你可以看到注释掉的代码是我最初的想法或最终目标(无论是通过这个设置还是在另一个activity
然而,即使 fenceID 是主页,我也没有收到任何对此设置的响应。谁能阐明我在这里做错了什么?如果有人需要,我可以用更多代码更新问题。如果我需要在清单中放入一些东西,也许我没有正确注册我的广播接收器?无论如何,非常感谢您提供的所有帮助!
您不能在同一任务中从 Service
上下文开始新的 Activity
。从那里启动 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)
。
我的猜测是,由于条件中的这个错误,您的代码从未执行过。