安卓手机改造智能电视盒子,体现垃圾佬身份的时候到了!(使用手机三星S3 i9300)
事情的开始是我家最近买了一个智能电视盒子,从此告别闭路电视时代,然后我了解到智能电视盒子用的也是定制安卓系统,垃圾佬的嗅觉机敏地察觉到了商机(不是),就萌生了能不能用旧的安卓智能手机改装成盒子的操作。然后一顿折腾后,就有了这个东西
半成品图视频演示av85371907
接下来是从头到尾的构思过程和改造过程
我买的电视盒子是小米盒子4,配置的参数为晶晨Amlogic A53架构,四核1.5GHz,2+8G的存储配置。我手头的一台闲置安卓手机为12年的三星旗舰s3,配置参数为猎户座Exynos4412A9架构,四核1.4GHz,1+16G的存储配置。可以说硬件配置上完全可以胜任电视盒子的工作。
那好,硬件方面有保障了,但是我手头的这台老爷机已经十分卡顿了,而且被它的上一任主人装上了毒瘤软件,开机就会自动打开的手机清理大师,加上配置对于手机来说不高,可以说根本就不能正常的流畅使用,所以第一步工作就是先给它刷个机,换一个流畅的rom。
S3i9300适用的MIUI尝试了官方系统,flyme系统后,我最后选择的是第三方配置的miui,这个系统除了能流畅运行安卓系统外,更重要的是它配备了许多实用的搞机设置,比如更改默认桌面,超频之类的设置,为下一步深入配置提供了可能。
进入recovery刷机ntr好了,进入系统了,可以感受到流畅了许多,可以进一步配置了。
智能电视系统和普通的安卓手机差别在哪里呢?其实差别并不是很大,可以列举出来
横屏,安卓手机多是为竖屏使用场景,触屏操作,所以其操作逻辑并不适用于智能电视。
通过遥控控制,当然不能用遥控就不能算作是电视了。
能将画面传输到电视上,电视盒子都有HDMI接口和av接口,而手机则没有。
无外乎三点,现在可以逐个击破了。
智能电视用的也是安卓系统,所以应用安装包是和安卓手机通用的.apk。所以横屏的问题可以使用为智能电视专门设计的app来实现,操作逻辑也是符合电视遥控器操作的。那就先从桌面开始吧。安装一个电视桌面app,然后设置为默认桌面,替换原本的竖屏的系统桌面。试用了几款电视桌面后,我最后选择了当贝桌面,理由很简单,界简洁好看,功能也不少。将其设置为默认桌面,就可以开机直接打开电视桌面了。
ps:如果没有默认桌面的设置入口,可以通过修改安装包,通过监听开机广播的方式实现开机启动,也可以尝试root后使用软件启动。
刚下好的当贝桌面再见,系统桌面关于遥控的问题,我了解过红外遥控器搭配cec功能使用,但是这个功能使用条件比较复杂,最后还是选择用现成的蓝牙遥控方案,可以直接遥控链接手机,不用经过电视接收红外信号,可靠性也比较高。灵感来源于蓝牙自拍杆。
手机都支持蓝牙遥控实现某些功能,自拍杆能实现拍照功能,那会不会有能实现遥控功能的设备呢?在淘宝绕了一大圈最后发现,我手头的小米盒子的遥控器就可以实现这个功能啊!
同时按下主页和设置键,重新寻找配对设备,然后手机打开蓝牙,搜寻附近设备,找到小米蓝牙遥控,配对,将遥控器设置为输入设备(相当于鼠标键盘),成了!然后测试功能,除了语音键和设置键,其他都可以正常使用,包括确认,相当于单击屏幕,音量加减,上下左右的移动,返回键,主页键和电源键。语音键是手机本身不支持,而设置键不应该不能用的啊?
找寻一番后发现原因所在,是这个rom设置的问题。开发者为了利用S3手机三大金刚按键中,居左的不常用的设置键,把它设置成了显示近期任务的功能,只需要在设置中把按键功能改成“显示菜单”就可以解决这个问题了。
ps:发现了使用当贝桌面时会有黑屏后自动亮屏的问题,其实是当贝桌面的屏保设置在作怪,只要进入桌面设置关闭屏保就可以解决了。
传输到大电视上是电视盒子的终极目的,如果没有这个功能,电视盒子和手机也没有区别了。手机大多只有usb接口,想要传输到电视上,我们需要一个功能,MHL。
这是MHL线MHL是将移动设备和高清电视链接的一种接口,一端是microucb或者是usbc接口,另一端是HDMI和usb供电接口,因为只有通过usb供电才能使信号转换芯片运作。但不是所有手机都支持MHL协议,是否支持可以百度。我手头的三星S3是支持的,但是这台手机的接口为11pin的microusb接口,比普通型要长3毫米左右,一般的mhl线不能用,得买专门定制的,还好万能的某宝都有,于是就很愉快地下单了,过年快递停运,大概春节假期结束后才能真正上机了。
三大问题已经解决(大概),在等快递开运的功夫,再好好调整一下设置,为了以后能正常稳定地使用。思路是尽量模仿电视盒子设置,我首先是把亮度固定了,设置永不休眠,开关屏幕通过遥控按键。然后关闭震动,关闭了无用的呼吸灯,关闭锁屏密码,进入开发者模式设置为点亮屏幕直接进入系统,就免去了解锁的困扰。为了这可怜的1G内存能保证长时间流畅运行,得设置锁屏后自动清理内存,然后再将处理器频率拉高0.3GHz,那这颗处理器就有了1.7GHz的最高主频!
做到这里,这个安卓手机已经完全变成了可以正常使用的智能电视盒子了,去下载电视直播和点播应用,开始愉快地看电视吧!
安卓手机蓝牙控制智能小车 android程序设计
项目名称:安卓手机控制智能小车本文主要介绍手机端程序设计源码托管在地址:github.com/cyang812/Bluetooth_Car开发平台:win10;开发软件:AndroidStudio2.1
在开发的过程中,软件版本有过几次更新,本文重点讲述更新逻辑及实现过程。一、Bluetooth_Demo(通过按钮控制)1、这是最早开发的版本,通过连接蓝牙后,可实现通过按钮(Button)控制小车运动。2、主要代码:Version1.0监听按钮的点击事件
……publicvoidonClick(Viewv){switch(v.getId()){caseR.id.imagebutton1:message[0]=(byte)0x41;//设置要发送的数值vibrator();//振动器Toast.makeText(this,"前进",Toast.LENGTH_SHORT).show();bluesend(message);//发送数值Log.d("cy08",""+message[0]);break;caseR.id.imagebutton2:message[0]=(byte)0x44;vibrator();Toast.makeText(this,"左转",Toast.LENGTH_SHORT).show();bluesend(message);Log.d("cy08",""+message[0]);break;……Version1.0Bug点击前进后,便会不停向前,直到接受到下一个控制信号。其他按钮也是如此,这样小车运行就没办法停止。这个问题的原因是,从手机程序的角度说,点击一个按钮后,程序判断这个按钮的意图,例如前进,则发送一个预设的数值,比如‘A’,当然这需要转换成ASCII码值,并采用十六进制发送,具体会在蓝牙通信原理部分讲述。也就是说,点击一次按钮,仅发送一次数据。从单片机程序讲,蓝牙模块接受完一个数据,通过串行口请求中断,单片机根据接收到的数据控制输出,以实现对小车的控制。所以按一个按钮仅发送一个数据的方式实际上就造成了小车运动不灵活,无法停止。
Version1.1添加停止按钮
caseR.id.imagebutton5:message[0]=(byte)0x40;vibrator();Toast.makeText(this,"停止",Toast.LENGTH_SHORT).show();bluesend(message);Log.d("cy08",""+message[0]);break;这个版本添加停止按钮,通过发送一个不同的数值,蓝牙将该数值传输给单片机后,单片机对电机的输出端变为低电平,之后小车停止运动。这个按钮实际上解决了问题,只不过在每次想要停止时还要按下按钮不是一种符合交互逻辑的方式。更好的方式应该是按下按钮小车运动,放开按钮小车停止。这也就是Version1.2
Version1.2部分代码监听按下和放开的事件
classButtonListenerimplementsView.OnTouchListener{publicbooleanonTouch(Viewv,MotionEventevent){switch(v.getId()){caseR.id.imagebutton1:if(event.getAction()==MotionEvent.ACTION_UP){//放开事件message[0]=(byte)0x40;//设置要发送的数值bluesend(message);//发送数值Log.d("cy08",""+message[0]);}if(event.getAction()==MotionEvent.ACTION_DOWN){//按下事件message[0]=(byte)0x41;//设置要发送的数值bluesend(message);//发送数值Log.d("cy08",""+message[0]);}break;这段代码实现了监听按钮的按下和放开事件。按下和放开发送不同的数值,用以实现不同的控制。按下前进,发送数值,单片机进入中断程序,放开发送新的数值,单片机又一次中断。这个版本删除了V1.1中的停止按钮,因为已经不需要了,放开任意按钮就会发送停止运行的数据。
二、Gsensor(通过手机传感器控制)1、手机调用传感器判断手机方位,通过连接蓝牙后发送数据,控制小车运动。2、主要代码:Version1.0
if(y