Android用tabhost实现 界面切换,每个界面为一个独立的activity操作
我就废话不多说了,大家还是直接看代码吧~
//要extendsTabActivity publicclassMain_activityextendsTabActivity{ privateTabHosttabHost;//建立Tabhost控件 protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); tabHost=getTabHost(); addTab("act1","界面1",blue_tooth_Activity.class);//添加 addTab("act2","界面2",map_Activity.class); addTab("act3","界面3",plane_parameter_activity.class); setContentView(tabHost);//显示 } /** *添加Activity标签 *@paramtag标识 *@paramtitle标签标题 *@paramclazz激活的界面 */ privatevoidaddTab(Stringtag,Stringtitle,Classclazz){ TabHost.TabSpectabSpec=tabHost.newTabSpec(tag); tabSpec.setIndicator(title); Intentintent=newIntent(getApplicationContext(),clazz); tabSpec.setContent(intent); tabHost.addTab(tabSpec); } @Override protectedvoidonStop(){ super.onStop(); } }
补充知识:AndroidBLE中传输数据的最大长度怎么破
好多小伙伴们都被一个事儿困扰过:
想在gattclient上(一般是手机上)传输长一点的数据给gattserver(一般是一个Bluetoothsmart设备,即只有BLE功能的设备),但通过
writeCharacteristic(BluetoothGattCharacteristic)
来写的时候发现最多只能写入20个byte的数据。
这篇文章会回答下面几个问题:
1)为什么会是20?
2)如何突破20?
3)如何更优雅的来实现?
第一个问题,为什么为限制成20个字节?
corespec里面定义了ATT的默认MTU为23个bytes,除去ATT的opcode一个字节以及ATT的handle2个字节之后,剩下的20个字节便是留给GATT的了。
考虑到有些Bluetoothsmart设备功能弱小,不敢太奢侈的使用内存空间,因此corespec规定每一个设备都必须支持MTU为23。
在两个设备连接初期,大家都像新交的朋友一样,不知对方底细,因此严格的按照套路来走,即最多一次发20个字节,是最保险的。
由于ATT的最大长度为512byte,
因此一般认为MTU的最大长度为512个byte就够了,再大也没什么意义,你不可能发一个超过512的ATT的数据,就像是孙猴子跑不过五行山一样。
所以ATT的MTU的最大长度可视为512个bytes。
第二个问题,如何突破20?
很简单嘛,改变传输的ATT的MTU就行了,大家经过友好的协商,得到双方都想要的结果,是最好的。在Android上(API21),改变ATTMTU的接口为:
publicbooleanrequestMtu(intmtu)AddedinAPIlevel21RequestanMTUsizeusedforagivenconnection.Whenperformingawriterequestoperation(writewithoutresponse),thedatasentistruncatedtotheMTUsize.ThisfunctionmaybeusedtorequestalargerMTUsizetobeabletosendmoredataatonce.AonMtuChanged(BluetoothGatt,int,int)callbackwillindicatewhetherthisoperationwassuccessful.RequiresBLUETOOTHpermission.Returnstrue,ifthenewMTUvaluehasbeenrequestedsuccessfully
大声的说出来你想要一下子传多少,调用上面的接口就可以了,然后在下面的函数中看最终结果(当然了,如果你的peripheral申请改变MTU并且成功的话,那这个回调也会被调用):
@Override publicvoidonMtuChanged(BluetoothGattgatt,intmtu,intstatus){ super.onMtuChanged(gatt,mtu,status); if(status==BluetoothGatt.GATT_SUCCESS){ this.supportedMTU=mtu;//localvartorecordMTUsize } }
之后你就可以快乐的发送supportedMTU-3的长度的数据了。
第三个问题,如何优雅的来实现?
俗话说得好,郎有情就怕妾无意。万一对方设备不同意你的请求怎么办?
对于app来说,一般是知道自己要最大发送多少数据的,例如一次要发100个bytes,那么就首先试试申请一下103,失败的话,则申请一下53,即二分法,剩下的只能自己分段拆着发了。
一般来讲,app的开发者和对端设备的开发者都是同一伙儿人,这是好事儿,他们可以根据自己设备的硬件情况,来商量MTU应该是多少。
总之,把事儿摆到桌面上,提前做好,会使得你的程序更加professional。
以上这篇Android用tabhost实现界面切换,每个界面为一个独立的activity操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。