Android-APP之桌面宠物

源码:https://github.com/benxhinGH/Desktopet.git

本是需要研究android-app漏洞挖掘,那前提就是要先了解android-app的内部原理。于是开始上手学习android-app,借机参加了腾讯提供的android移动开发课程。

这个app主要是实现一个桌面宠物,同时可以提供多项功能:接受微信消息;闹钟功能;蓝牙配对;宠物属性设置等。其中我主要负责两个部分,一个是软件开始之前的设计工作;另一个是详细的设计蓝牙配对功能。

前期设计工作基本不做详细描述,主要是按照要求,并加上我自己的想法搭建起一个具体框架,具体的实现是由队友负责。

蓝牙配对功能是我实现的,操作方式是,当用户点击宠物的蓝牙配对功能时,就会根据提示打开蓝牙并且主动搜索其他的蓝牙设备,两个设备的宠物就可以进行通信;除此之外,计划的蓝牙配对还包含可以在一个界面内显示配对成功后对方的宠物。就像qq里边的厘米秀功能一样;我们可以利用java的多态特性,使得不同的宠物拥有相同的动作;我们就可以发送动作。

在这个过程中遇到的问题主要有:

A.     android-app中蓝牙通信的原理

B.     蓝牙协议实现过程的代码完备性

C.     如何处理socket接口以及各个组件返回的信息

D.    句柄对各种返回信息的处理

E.     Activity,Service,BroadcastReceiver等四大组件的生命周期(此功能中主要用到的是前三个)

F.     如何实现调用宠物对象到自己的容器内(暂未解决)

-----------------------------------------------------------------------------

此过程中的开发学习了git,可以使用git+github实现协作开发

-----------------------------------------------------------------------------

1.首先需要蓝牙权限&&设置蓝牙可见性:

l  允许程序打开蓝牙设备;并且连接到已配对设备

l  允许程序发现和配对蓝牙设备

l  其中遇到的疑惑:安全连接与不安全连接的区别

2.BluetootAdapter

l  本地蓝牙适配器;可执行基本的蓝牙任务;如:

l  启动蓝牙设备;查询已配对的设备列表;使用已知的MAC地址实例化一个BluetoothDevice类;创建一个BluetoothServerSocket建立来自其他设备的连接请求

l  获取蓝牙适配器getDefaultAdapter();开启蓝牙(Intentin activity+startActivityForResult);获取本地蓝牙信息(bluetoothAdapter.getAddres);搜索蓝牙设备,此过程为异步的,需要注册一个广播接收者,监听是否搜到设备(bluetoothAdapter.startDiscovery);监听扫描结果(通过广播接收者onReceive查看扫描到的蓝牙设备,每扫描到一个设备,系统都会发送此广播BluetoothDevice.ACTION_FOUND);停止搜索(bluetoothAdapter.cancelDiscovery)

3.SDP协议通信

l  服务器端:

a)     通过SDP协议建立链接进行通信;类似于平常使用的socket

b)     创建BluetoothServerSocket

c)     安全的RFCOMM Bluetooth socket:连接时需要配对

d)     不安全的RFCOMM Bluetooth socket:连接时不需要配对

e)     AcceptThread创建侦听线程;accept阻塞;另一线程.close(),终止该阻塞;侦听到连接后连接;这里需要注意状态的的异常判断

l  客户端:

a)     RFCOMM socket,并连接服务端。

b)     先扫描周围的蓝牙设备,如果扫描到指定设备则进行连接

c)     ConnectThread

l  数据传输:

a)     ConnectedThread

b)     发送数据

c)     接收数据

-------------------------------------------------------------------------

消息处理:分为两类:各个组件之间的消息传递+蓝牙配对之后两个设备之间的消息传递

第一部分的组件之间的消息传递主要使用的是各个组件内部的接口函数;比如activity的startActivityForResult函数;onReceive等

第二部分的两个设备连接之后通过蓝牙进行传递的主要是利用消息句柄;这里的消息句柄不仅处理蓝牙通信过程中的数据;还会处理蓝牙连接和配对过程中的蓝牙状态/控制信息。这些需要非常严谨的逻辑,并且处理整个流程可能会出现的异常。这部分借鉴了google的sample,不得不说高级工程师的代码还是很牛的。

--------------------------------------------------------------------------

Activity : 不同的启用模式对应任务栈的改变情况;比如Standard、SingleTop、SingleTask..

生命周期:onCreate() onStart() onStop() 。

Service: 1.Service不是一个单独的进程,它和它的应用程序在同一个进程中

2.Service不是一个线程,这样就意味着我们应该避免在Service中进行耗时操作

onCreate()、onStart()或者说是onStartCommand();onDestroy()

Broadcast: 所有广播会一起收到广播;广播不可以被截断同时也不可以对传输的数据进行修改

contentProvider: ContentProvider 实例通过处理来自其他应用的请求来管理对结构化数据集的访问。所有形式的访问最终都会调用 ContentResolver,后者接着调用ContentProvider的具体方法来获取访问权限。

Intent:     协助应用间的交互与通讯;Intent负责对应用一次操作的动作、动作设涉及数据、附加数据进行描述,Android则根据此Intent描述,找到对应组件,将Intent传递给调用的组件,并完成组件调用。

Android-APP之桌面宠物相关推荐

  1. 在家看片利器,有Android App以及桌面应用(已开源)。

    ShareBox 看片终极解决方案. 家庭看片神器,可以用手机播放电脑里的视频,也可以用电脑播放手机里的视频,使用简单,能稳定运行在后台,目前支持的设备有Windows,Mac,Android. 最新 ...

  2. Android全局桌面宠物 Unity方案实现

    Android全局桌面宠物 Unity方案实现 最近接到一个任务是Android设备上实现一个全局的指引动画,开始想着就用普通动画控件或者svga.lottie控件实现,最近正好在学习Unity,所以 ...

  3. Unity导出Android制作桌面宠物精灵需要背景透明

    项目场景: Unity制作小精灵导出后,嵌入Android页面中.要求整个APP页面只有一个Android页面背景,因此Unity需要背景透明.最后要求整个APP代码以SDK和API的方式提供给第三方 ...

  4. Android APP安装后不在桌面显示图标的应用场景举例和实现方法

    最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如 ...

  5. 转Android APP安装后不在桌面显示图标的应用场景举例和实现方法

    转http://www.cnblogs.com/allenzheng/p/4510725.html#3186608 Android APP安装后不在桌面显示图标的应用场景举例和实现方法 最近在为公司做 ...

  6. android 清理内存图标掉进垃圾桶的动画,Android Magnet:桌面删除APP自动弹出垃圾桶接受图标删除动作...

     Android Magnet:桌面删除APP自动弹出垃圾桶接受图标删除动作 在Android系统上,当用户长按桌面的图标后,会自动从底部或者顶部弹出一个垃圾或者叉子的删除图标,用户拖曳欲删除的图 ...

  7. Android如何隐藏app的桌面显示图标

    有时候基于一些特殊的需求我们需要将app的桌面图标隐藏,这时该怎么做呢?我们将AndroidManifest.xml中的主activity的 <category android:name=&qu ...

  8. 解决方案:Android引入一个新的Module/AAR后,原APP的桌面图标改变

    问题描述: Android引入一个新的Module/AAR后,原APP的桌面图标改变了. 原因: 在创建工程时,Android Studio3.x会自动创建一个mipmap-anydpi-v26文件夹 ...

  9. 2021-11-18 Android APP安装后不在桌面显示图标的一个方法

    一.有时候安装一个app,不想在桌面上显示图标,而是在其他地方调出这个程序. 要想在桌面不显示图标,只需注释掉APP入口Activity中的<category android:name=&quo ...

  10. android之启动桌面activity

    主页面布局:layout\activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/r ...

最新文章

  1. 关于写代码的几个看法
  2. Nginx 出现504 Gateway Time-out的解决方法
  3. spring中@Value的注解解析
  4. 修改PostgreSQL数据库默认用户postgres的密码
  5. keras模型保存和加载
  6. 亚马逊服务器维护,Amazon EC2 维护帮助页面
  7. JS常见的字符串操作
  8. 手动编译安装lanmp centos6.5 64位
  9. 【论文阅读】Computational Personality: A Survey 计算性格学综述
  10. 现代处理器设计——超标量处理器基础(5-8)
  11. 阿铭Linux第二章笔记
  12. 加密流量分类任务的深度学习方法(一般框架总结)
  13. 属于计算机网络硬件系统有哪些,下列不属于计算机硬件系统的是()
  14. 黑大项目群第二次作业,飞行棋(龟兔赛跑)java
  15. 电脑文件误删除怎么恢复?
  16. 卫龙更新招股书:上半年净利润同比下降,产能未饱和仍要募资扩产
  17. 常用的60招电脑操作
  18. icon小图标集合网站
  19. 天梯赛:L2-016 愿天下有情人都是失散多年的兄妹 (25 分)
  20. java通过输入的方式给int数组赋值并输出数组

热门文章

  1. 蓝湖 Figma 插件被下架了怎么办?蓝湖的替代品列表
  2. 北京市丰台区卫星地图下载
  3. 八大排序算法详解(通俗易懂)
  4. a标签下载文件 自定义下载文件名
  5. 项目接力:售前、售中、售后
  6. 加热垫美国站UL130测试项目及周期
  7. 联想M7216NWA墨粉清零:
  8. Nodejs接口输出json数据
  9. 数控车宏程序c语言,a类宏程序什么意思?a类宏程序编程入门
  10. 算术编码数据压缩Matlab报告,用matlab实现算术编码