Android用tabhost实现 界面切换,每个界面为一个独立的activity操作

 更新时间:2020年09月01日 10:53:24   作者:AI蜗牛车  
这篇文章主要介绍了Android用tabhost实现 界面切换,每个界面为一个独立的activity操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

我就废话不多说了,大家还是直接看代码吧~

// 要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。

以上这篇Android用tabhost实现 界面切换,每个界面为一个独立的activity操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • android文件管理器用法详解

    android文件管理器用法详解

    这篇文章主要为大家详细介绍了android文件管理器的用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Android实现评论栏随Recyclerview滑动左右移动

    Android实现评论栏随Recyclerview滑动左右移动

    这篇文章主要介绍了Android实现评论栏随Recyclerview滑动左右移动效果,仿约会吧应用详情页实现,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • RecyclerView实现流式标签单选多选功能

    RecyclerView实现流式标签单选多选功能

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。这篇文章主要介绍了RecyclerView实现的流式标签单选多选功能,需要的朋友可以参考下
    2019-11-11
  • 基于Flutter制作一个火箭发射动画

    基于Flutter制作一个火箭发射动画

    北京时间10月16日0时23分,神舟十三号飞船成功发射,为庆祝这一喜事,本文将用Flutter制作一个火箭发射动画,感兴趣的小伙伴可以动手试一试
    2022-03-03
  • Android中的导航navigation的使用详细步骤

    Android中的导航navigation的使用详细步骤

    在Android中,导航主要通过使用Navigation SDK来实现,该SDK提供了一组工具和组件,可以帮助开发人员构建具有一致性和可访问性的用户界面,这篇文章主要介绍了Android中的导航navigation的使用详细步骤,需要的朋友可以参考下
    2024-04-04
  • Android使用CountDownTimer实现倒计时效果

    Android使用CountDownTimer实现倒计时效果

    这篇文章主要为大家详细介绍了Android使用CountDownTimer实现倒计时效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Android编写简单的网络爬虫

    Android编写简单的网络爬虫

    网络爬虫是捜索引擎抓取系统的重要组成部分。爬虫的主要目的是将互联网上的网页下载到本地形成一个或联网内容的镜像备份。本文的主要内容是讲在Android中如何编写简单的网络爬虫。
    2016-07-07
  • 分享Android平板电脑上开发应用程序不能全屏显示的问题解决

    分享Android平板电脑上开发应用程序不能全屏显示的问题解决

    在一个8寸屏的Android平板电脑上开发应用程序(游戏程序),开始的时候,总是不能全屏显示,也不知道怎么设置才可以
    2013-05-05
  • 教你如何搭建android源代码repo仓库

    教你如何搭建android源代码repo仓库

    这篇文章主要介绍了如何搭建android源代码repo仓库,如果你的开发是基于AOSP源码来建仓,那么搭建repo服务器和部署自己的repo仓库就是非常必要的工作了,本文给大家详细介绍搭建过程,感兴趣的朋友一起看看吧
    2022-07-07
  • Android入门之使用OKHttp多线程下载文件

    Android入门之使用OKHttp多线程下载文件

    OkHttp是一个神器。OkHttp分为异步、同步两种调用。今天我们就会基于OkHttp的异步调用实现一个多线程并行下载文件并以进度条展示总进度的实用例子,需要的可以参考一下
    2023-01-01

最新评论