【问题标题】:geofence pending intent returns地理围栏待定意图返回
【发布时间】:2015-07-25 11:23:45
【问题描述】:

我希望向我的应用程序添加功能,允许我使用触发的地理围栏的 ID 从数组中选择相应的 sample(url),然后将其传递给 exoplayer 进行流式传输。

目前我正在关注地理围栏 api,它使用连接到意图服务的待处理意图来管理地理围栏转换等。

查看在主要活动中设置的待处理意图,我可以请求它在转换时返回地理围栏 ID 吗? 我对android和这个api都很陌生,所以任何和所有的帮助都会非常感激! 非常感谢!

【问题讨论】:

    标签: android arrays android-intent geofencing android-geofence


    【解决方案1】:

    如果我正确理解了您的问题(我可能没有正确理解),那么在转换事件发生时应该已经返回地理围栏 ID。

    解释文档,当您的 PendingIntent 被触发时:

    您可以致电GeofencingEvent.fromIntent(Intent) 获取过渡类型,地理围栏 触发此意图的位置以及触发 地理围栏过渡。

    从生成的GeofencingEvent 对象中,您可以调用getTriggeringGeofences() 来检索导致转换的Geofence 的列表,然后调用每个getRequestId() 来检索ID。

    编辑 一些代码......这是未经测试的(因为我拒绝跳舞关于测试地理围栏边界!),但我希望它应该工作。 我假设您已经有一个有效的地理围栏设置,并且它正在正确调用您的 IntentService。在您的 IntentService 中,您应该有一个 onHandleIntent 方法:

    void onHandleIntent(Intent intent) {
        // retrieve the GeofencingEvent from the passed Intent
        GeofencingEvent ge = GeofencingEvent.fromIntent(intent);
    
        // get the Geofences that triggered it
        List<Geofence> fences = ge.getTriggeringGeofences();
    
        // checking there is only one fence (bad assumption!!!!), retrieve the request Id
        if (fences == null || fences.size() != 1) {
            return;
        }
        String fenceID = fences.get(0).getRequestId();
    
        // do something funky with it...
    }
    

    您应该调试或记录每一行以检查它是否正常工作。如果这不起作用或不是您所期望的,请告诉我。

    【讨论】:

    • 非常感谢,这对我来说绝对是朝着正确方向迈出的一步!这似乎正是我需要完成的。我的想法是我可以获得触发地理围栏的 ID,然后使用它向我的 exoplayer 实例发送相应的 url 并开始音频流。这对我来说很难理解,所以我非常感谢你的帮助!我仍然不确定如何实现我想要做的事情,但你肯定让我朝着正确的方向迈出了一步,所以谢谢!
    • 不幸的是,我在尝试执行您给我的建议时仍然遇到问题。恐怕我非常业余在我的代码中以及如何正确使用它们:S 非常感谢您已经提供的帮助以及将来的帮助!
    • 非常感谢!!!我还没有经历过所有事情,但是我被你的好意弄得不知所措,在过去的几天里,这个问题对我来说一直是个难题!如果我能给你买啤酒,我会的!希望这将是结束我的困境的关键:)!干杯。
    • 感谢您到目前为止的耐心等待!这是我正在尝试的设置:) 这可能是完全错误的!日志 o/p 是 Home,所以这很好,但是我的意图没有开始,这在这个服务中是不可能的吗?我应该改为广播消息还是有更聪明的方法?我再次欠你很多,所以如果你能帮助我更多,谢谢! if (fenceID == Home){ Intent mpdIntent = new Intent(this, PlayerActivity.class) .setData(Uri.parse("maxmarshall.ddns.net/segments/TEST_dash.mpd")) .putExtra(PlayerActivity.CONTENT_ID_EXTRA, "我的测试") startActivity(mpdIntent); }
    • 您所描述的应该可以工作 - 可以从服务启动活动。我认为您需要在调用 startActivity() 之前设置 new_task 标志。例如 mpdIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);,但没有看到代码,很难确定它失败的原因。查看 logcat 的输出可能会给您一个线索,或者您可以在 SO 上发布另一个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 2014-02-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2015-11-07
    相关资源
    最近更新 更多