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)

我的猜测是,由于条件中的这个错误,您的代码从未执行过。