Android用tabhost实现 界面切换,每个界面为一个独立的activity操作
作者:AI蜗牛车 发布时间:2021-11-09 11:22:26
我就废话不多说了,大家还是直接看代码吧~
// 要extends TabActivity
public class Main_activity extends TabActivity {
private TabHost tabHost;// 建立Tabhost控件
protected void onCreate(Bundle savedInstanceState) {
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标签
* @param tag 标识
* @param title 标签标题
* @param clazz 激活的界面
*/
private void addTab(String tag, String title, Class clazz) {
TabHost.TabSpec tabSpec = tabHost.newTabSpec(tag);
tabSpec.setIndicator(title);
Intent intent = new Intent(getApplicationContext(),clazz);
tabSpec.setContent(intent);
tabHost.addTab(tabSpec);
}
@Override
protected void onStop() {
super.onStop();
}
}
补充知识:Android BLE中传输数据的最大长度怎么破
好多小伙伴们都被一个事儿困扰过:
想在gatt client上(一般是手机上)传输长一点的数据给gatt server(一般是一个Bluetooth smart设备,即只有BLE功能的设备),但通过
writeCharacteristic(BluetoothGattCharacteristic)
来写的时候发现最多只能写入20个byte的数据。
这篇文章会回答下面几个问题:
1)为什么会是20?
2)如何突破20?
3)如何更优雅的来实现?
第一个问题,为什么为限制成20个字节?
core spec里面定义了ATT的默认MTU为23个bytes,除去ATT的opcode一个字节以及ATT的handle2个字节之后,剩下的20个字节便是留给GATT的了。
考虑到有些Bluetooth smart设备功能弱小,不敢太奢侈的使用内存空间,因此core spec规定每一个设备都必须支持MTU为23。
在两个设备连接初期,大家都像新交的朋友一样,不知对方底细,因此严格的按照套路来走,即最多一次发20个字节,是最保险的。
由于ATT的最大长度为512byte,
因此一般认为MTU的最大长度为512个byte就够了,再大也没什么意义,你不可能发一个超过512的ATT的数据,就像是孙猴子跑不过五行山一样。
所以ATT的MTU的最大长度可视为512个bytes。
第二个问题,如何突破20?
很简单嘛,改变传输的ATT的MTU就行了,大家经过友好的协商,得到双方都想要的结果,是最好的。在Android上(API 21),改变ATT MTU的接口为:
public boolean requestMtu (int mtu) Added in API level 21 Request an MTU size used for a given connection. When performing a write request operation (write without response), the data sent is truncated to the MTU size. This function may be used to request a larger MTU size to be able to send more data at once. A onMtuChanged(BluetoothGatt, int, int) callback will indicate whether this operation was successful. Requires BLUETOOTH permission. Returns true, if the new MTU value has been requested successfully
大声的说出来你想要一下子传多少,调用上面的接口就可以了,然后在下面的函数中看最终结果(当然了,如果你的peripheral申请改变MTU并且成功的话,那这个回调也会被调用):
@Override
public void onMtuChanged(BluetoothGatt gatt, int mtu, int status) {
super.onMtuChanged(gatt, mtu, status);
if (status == BluetoothGatt.GATT_SUCCESS) {
this.supportedMTU = mtu;//local var to record MTU size
}
}
之后你就可以快乐的发送supportedMTU-3的长度的数据了。
第三个问题,如何优雅的来实现?
俗话说得好,郎有情就怕妾无意。万一对方设备不同意你的请求怎么办?
对于app来说,一般是知道自己要最大发送多少数据的,例如一次要发100个bytes,那么就首先试试申请一下103,失败的话,则申请一下53,即二分法,剩下的只能自己分段拆着发了。
一般来讲,app的开发者和对端设备的开发者都是同一伙儿人,这是好事儿,他们可以根据自己设备的硬件情况,来商量MTU应该是多少。
总之,把事儿摆到桌面上,提前做好,会使得你的程序更加professional。
来源:https://blog.csdn.net/qq_33431368/article/details/70799727


猜你喜欢
- tomcat内存溢出设置JAVA_OPTS答案1设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xm
- 在Spring Cloud Netflix栈中,各个微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户
- 为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能。微信支付分为6种支付模式:1.付款
- 1. 什么是 HookHook 英文翻译过来就是「钩子」的意思,那我们在什么时候使用这个「钩子」呢?在 Android 操作系统中系统维护着
- 前言我曾经在一篇介绍 Compose Navigation 的文章 中提到了 Navigation 的状态保存实际是由 rememberSa
- 冒泡排序原理①比较相邻的元素,如果前一个元素比后一个元素大,则交换这两个元素的位置②对每一对相邻的元素循环上面的步骤,最终最后面的元素就是最
- 和Android UI layout一样,我们也可以在XML中定义应用程序的菜单。通过在菜单的onCreateOptionsMenu方法中膨
- ??Chip监听选中状态的监听:setOnCheckedChangeListener,该监听只有设置了checkable 属性为true或者
- 一、顺序结构程序的执行和代码的执行顺序有关,如果调整代码的书写顺序, 则执行顺序也发生变化二、分支结构基本语法形式1:if(布尔表达式){
- springBoot集成Elasticsearch 报错 Health check failed今天集成Elasticsearch 时启动报
- 背景公司的开发框架集成了附件本地存储,阿里云,华为云等,现项目有要求附件存储与应用部署环境不能是同一台服务器,也不能使用云存储,经过技术选型
- # 前言在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信
- 本文实例为大家分享了java实现登录验证码功能的具体代码,供大家参考,具体内容如下登录验证码登录验证是大多数登录系统都会用到的一个功能,它的
- 对于QQ截图,肯定是早就有认识了,只是一直没有去认真观察这个操作的具体实现步骤。所以这里将自己的记忆中的步骤简单的写一下:习惯性用QQ或者T
- 1.数据数据(Data)是外部世界信息的载体, 是能够被计算机识别,加工,存储的。在现实生活中也就是我们的产品原材料。计算机中的数据包括数值
- 本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下
- 本文实例讲述了Java使用组合模式实现表示公司组织结构功能。分享给大家供大家参考,具体如下:一、模式定义组合模式:将对象组合成树形结构以表示
- 一、工具类代码public class TaskHelper {#region 多线程操作 &nbs
- 多态性1理解多态性:可以理解为一个事物的多种形态。2何为多态性:对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用)3多态的
- java 8的新特性之一就是lambda表达式,parallelStream()都说性能会比较高,现一探究竟。话不多说,上代码: @Test