IntentService启动意图或广播消息?

时间:2015-07-26 16:36:12

标签: android android-intent broadcastreceiver intentservice geofencing

我目前有一个意图服务来管理我的地理围栏过渡,我希望使用地理围栏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,我也没有通过此设置得到任何响应。任何人都可以了解我在这里做错了什么吗?如果有人需要,我可以用更多代码更新问题。也许我没有正确地注册我的广播接收器,如果我需要把它放在清单中?无论如何,非常感谢任何和所有的帮助!

1 个答案:

答案 0 :(得分:1)

您无法在同一任务中从Activity上下文中启动新的Service。从那里开始Activity的唯一方法是使用标记FLAG_ACTIVITY_NEW_TASK。在实现之前确保确实需要它。

您发送广播消息的代码看起来很好。只需确保正确注册您的接收器并且IntentFilter匹配。

另外,永远不要这样做:

String fenceID = fences.get(0).getRequestId();
Log.i( fenceID, "fenceID is");

if (fenceID == Home){

fenceIdString,即它是Object。只有当两个引用都指向同一个对象时,与==进行比较才会显示true。在这种情况下,这真的是你想要的吗?如果要比较字符而不是对象,请使用fenceId.equals(Home)

我的猜测是你的代码永远不会被执行因为这种情况下的错误。