文档开发者中心
我的

【HMS Core挑战赛第4期】上班自动打卡器

功能介绍

本app使用了hms code的地理围栏功能,在靠近公司触发事件,弹出钉钉打卡的页面。如果有开快速打卡的功能,那就等于啥都不干直接打上卡了。希望可以给每天匆匆忙忙上班的打工人们减轻一点负担。

功能展示

由于地理围栏的功能测试比较麻烦,所以通过环境光的功能触发事件来拍gif。可以看到功能简单易用,在地图上单击选取公司位置,点击开启提醒,即可。在围栏被触发后,自动跳转到钉钉。

2021-12-22%20193715.gif

代码简析

hms的情景感知服务用起来是比较简单的。

1. 检查手机有没有相应的情景感知能力,免得大家白干

收起
自动换行
深色代码主题
复制

Awareness.getCaptureClient(this).querySupportingCapabilities().addOnCompleteListener { if (it.isSuccessful) { val capabilities = it.result.capabilityStatus.capabilities if (capabilities.contains(CapabilityStatus.AWA_CAP_CODE_LOCATION_NORMAL_BARRIER)) { log("位置感知围栏能力可用") } else { Toast.makeText(this, "位置感知围栏能力不可用,不如。。换台手机?", Toast.LENGTH_SHORT).show() log("位置感知围栏能力不可用") } if (capabilities.contains(CapabilityStatus.AWA_CAP_CODE_AMBIENT_LIGHT)) { log("环境光感知围栏能力可用") } } }

2. 添加围栏的流程就是定义围栏,提交围栏请求,在broastreceiver中处理围栏被触发后的事件。

核心代码如下:

收起
自动换行
深色代码主题
复制

val barrierLocation = LocationBarrier.enter(latLng.latitude, latLng.longitude, 200.0) val intent = Intent(BARRIER_RECEIVER_ACTION) val pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT) val barrierReceiver = LocationBarrierReceiver() registerReceiver(barrierReceiver, IntentFilter(BARRIER_RECEIVER_ACTION)) Awareness.getBarrierClient(application) .updateBarriers( BarrierUpdateRequest.Builder() .addBarrier(BarrierTAG, barrierLocation, pendingIntent) .build() ) .addOnSuccessListener { log("开启地理围栏成功") Toast.makeText(this, "开启打卡提醒成功", Toast.LENGTH_SHORT).show() } .addOnFailureListener { log("开启地理围栏失败 $it") Toast.makeText(this, "开启打卡提醒失败", Toast.LENGTH_SHORT).show() }
收起
自动换行
深色代码主题
复制

internal inner class LocationBarrierReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val barrierStatus = BarrierStatus.extract(intent) val label = barrierStatus.barrierLabel when (barrierStatus.presentStatus) { BarrierStatus.TRUE -> { startDingDingApp(context)// startDingDingApp2() log("$label status:true") } BarrierStatus.FALSE -> log("$label status:false") BarrierStatus.UNKNOWN -> log("$label status:unknown") } } }

至于地图啊,打开钉钉啊这些代码都是旁枝末节了,感兴趣的朋友可以看下我的代码。

今天的分享就到此结束了,谢谢大家,祝大家圣诞节快乐。

点赞
4
收藏
1
回复
9
分享
举报
浏览1192 发布于2021-12-22 11:50未知归属地
全部评论
最多点赞
最新发布
最早发布
这个可以有,感谢分享,立马实操
6楼回复于2022-01-21 05:50 未知归属地
什么鬼,可以私信吗哈哈哈
5楼回复于2022-01-07 04:47 未知归属地
神奇、神器、神泣……
4楼回复于2021-12-28 13:24 未知归属地
这个厉害了,刚需啊
1
3楼回复于2021-12-27 12:55 未知归属地
  • Kwoksiuwang
    嘻嘻😁
    2021-12-28 06:11 未知归属地
自动打卡,商机啊。
1
2楼回复于2021-12-24 14:10 未知归属地
  • Kwoksiuwang
    嘻嘻😁
    2021-12-28 06:11 未知归属地
刚需,一次忘打卡整月全勤都凉凉
1
1楼回复于2021-12-23 05:56 未知归属地
  • Kwoksiuwang
    难受住了,我们连全勤都没有
    2021-12-23 07:29 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

目录 收起
功能介绍
功能展示
代码简析
了解社区公约,与您携手共创和谐专业的开发者社区。