Home遥控键问题
描述
Anylauncher本是桌面HOME软件,Home按键正常即可唤起。怎奈本会议遥控器,没有Home按键。开机后从AnyLaucher进入会议,就无法再打开签到,也就是本桌面。
解决
前期在设定自定义ATV盒子的时候,提到过按键映射,修补遥控的功能。于是思路就是用看起来闲着的菜单按键,映射成Home。
首先捕获keylayout 配置文件,通过观察 adb 后 dumpsys input 来查看,遥控字段的 layout文件。kl结尾。位置在/system/usr/keylayout .
把此文件 adb pull 到本地,用一个文本工具编辑。先测试了key 1 1 这个按键。 虽然在logcat中观察keycode =8,但是,文件:
key 1 ESCAPE
key 2 1
key 3 2
key 4 3
改为
key 1 ESCAPE
key 2 HOME
key 3 2
key 4 3
adb remount
adb push /path/. #没有提供文件名,根据厂家不同,kl结尾具体路径,/system/usr/keylayout
adb reboot
用遥控器测试,1,可以从会议画面打开Home桌面App。
然后想找一个,没有任何意义的按键。因为1还有别的用。结果没有找到,因为logcat在keycode,1显示8.其它按键的keycode虽然能看到,但不知道怎么转换成这个文件中的key 码。于是就放弃了。
找到了两处菜单MENU的定义。打MENU替换为HOME。因为本身会议App没有用到MENU。
按上面步骤,再来一次,菜单按键可以成功唤出签到桌面。
会议机消息提醒
描述
由于有些会场晃过了点名,直接进入了会议,或者中间换人,不知道是否已经签到成功。这时最好有一个提醒,如果尚未签到,就提示一个toast窗口
解决
- 分步骤说说,Toast是个闪现的消息,在android下不需要干权限。只会闪出2秒最多3.5、昨天不知怎么搜到的一个,webkit,调用toast的案列。是百度AI给的提示吧。亦test.html.和一个接口文件。超级简单,下面分别列出。
- web端,也就就html页面
他在Anylancher中webkit显示, 其中加入以下js调用代码。
<script>
Android.showToast("toast:")
</script>
- App的源码中加入Andriod和showToast定义
WebAppInterface.java放在工程目录
package com.tumuyan.fixedplay;
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast;
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
在主APP,含有webkit在activity中oncreate 在webkit中加入以下配置这里的Android就是js中要引用的、
webView.getSettings().setJavaScriptEnabled(true); // 如果需要,启用JavaScript
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
这样的app写成apk安装后,在家里的乐视,前台时可以出现提醒。一但切入后台,我用的setInteval就不会再出现了。不允许有这种操作。
今天在会议机测试了一下。在后台是可以存活,并出现toast的。虽然后来测试了Dialog,就只有前台时可以弹出。后台时应该需要其他激活手段,才能弹出了,于是放弃了。
但是Toast也可以满足目前需要。
存在一个小插曲,我的debugkey因为androidstudio升级,密码给清空了。怎么也找不到以前signed时看的教程。又申请了一个新的。结果,无法用 adb install -r安装。这对于已经安装了很多机器的我是个打击。后来在另一个网页才找到默认的debug信息。比照一输入,结果成功了。无安全可言、就当玩吧。
2 . 前面讲到toast实现html调用, 现在讲何时发送toast通知,
在flask中使用socketio的emit消息发送。发送时机: 可以是间隔10秒做一个检测, 而我之前使用了websocket, 可以做到任意时刻通过订阅的消息通知,调用提醒,当有新用户上线,我已经做了flask消息接受,在这个接收处理中, 加入向"null"组发送消息,emit, 会议机收到通知后就可以toast提醒消息。
flask代码:
@socketio.on('connect',namespace='/chat')
def test_connect():
global last_status,online_users
socketio.emit('null', {"data":'[闫]<^菜单键.签到!!!'},namespace='/chat');
online_users[request.sid]=myip()
logstatus()
print(request.sid,"connected from"+myip())
发给null的接收方。
接受方是在flask中一处route path下:先查看单点信息有无 V,没有则 null,有能nil。无任何处置。
@app.route("/onepoint/check/show/“
def checkone():
mark=( boots.find('V')>-1) and "nill" or "null"
return template.format(mainstr=boots,day=day,room=mark)
templage=“”“--------------
function handleNull(msg) {{
try {{
Android.showToast(`会前提醒:${{msg.data}}`) #因为做为网页使用,会报错,放在try中
}} catch (error) {{
// Code to handle the error
}}
}}
var socket = io.connect('http://10.80.133.35:9000/chat' );
socket.on('{room}',handleNull);
------------------------
”“”
到此,会前不签到,无论当前APP是什么,新用户上线就会有一条消息。
虽然不强制。但是也能让人注意一下.
最后
说点感受,每当有什么没解决的问题,过几天,好像在机缘碰巧下就突然有出路了, 开始想不到具体方案,随缘巧合而已。上月弄那个电视播放器按键时,也没想到会在这里用到。 这里用到技术还有,夏天时弄的一个无用的移植 flask。用到了css的捍取和设定,学到了位置颜色的精确定位。反正我不喜欢,一直在看一本书,从最初学起那种。当然 这种基本学习,在当初学python时,学了半年。也看了一些最初的常识。后来就不停在弄小东西们。正好又花了一个月,把这个签到算是弄成了。当然,依然看不出用处。
主要的是,用到的主流基础组件,vue,caddy。socketio,redis。这些,必竟哪里都有可能用到。以后会方便使用一些,所以我开始从头学一本书rust编程语言. 好此项目估计不会有大更新了。这个系列剩下有个小问题是自动更新apk。是不是可以,自己拉取,自已安装呢。如此简单一个程序。感觉必要性不大的。再说。
结果,最终采用了web推送安装的方式,也是始料不及的,因为看到了,screencpy的sh脚本.感觉精巧.