亲测:博主有课内学的粗浅的JAVA基础,其余从0开始,7天做出了一个“蓝牙智能窗帘”的APP。事实上,如果不是纠结蓝牙的一个bug不肯改方案,其余的学习和完成应该用了不到三天。
¶一、安装软件和环境
¶1.1. 安装JDK
JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。
没有JDK的话,无法编译Java程序(指java源码.java文件),如果想只运行Java程序(指class或jar或其它归档文件),要确保已安装相应的JRE。
¶1.2 下载并安装ADT集成开发环境和Android SDK
ADT:Android 集成开发环境,命名为 Android Developer Tools。
第一种装ADT的方式是:Eclipse Android SDK ADT Plugin。
第二种方法是安装Android Studio。
我采用的第二种方法。
查看Android Studio版本号:help->About
按着软件安装管家
里装的,成功装好了(JDK和adb是之前自己装的)
¶二、Hello World
¶2.1 手机端设置
¶2.2 创建工程
参考自:使用Android Studio开发Android APP
我选的最低Android版本是23,即6.0版。
¶2.3 一些小get
Android Studio采用gradle来构建项目,gradle是一个项目构建工具,可以完成软件环境部署和打包等任务。在build.gradle文件中写项目的配置,比如引用外部仓库的工具等。你在Android Studio写好的代码最终要下载到手机里,或者打包成apk发布出去,这里的工作就依赖gradle完成。
项目中一般会出现2个或者多个build.gradle文件,一个在根目录下,一个在app目录下。
如果切换到Android模式下则全部在Gradle Scripts。
如果报错 unable to find valid certification path to requested target:
- 我的经验:找到这三个地方,把cacerts换成别人的能用的应该就行了吧
换完之后重启IDE,或者在IDE里File->Invalidate Caches / Restart,之后再File->Settings里看这里有没有证书,有的话应该就好了。
<img src="Android/image-20200523001137929.png" alt="image-20200523001137929" style="zoom:50%;" />
这个方法参考自:https://www.jianshu.com/p/89ca5b635d3f
- 另一个方法看起来很有用,但我没试过:https://blog.csdn.net/da_caoyuan/article/details/104343058
我用的gradle是:
代码语言:javascript复制gradle:1.5.0
https://services.gradle.org/distributions/gradle-2.8-all.zip
¶三、开始真正的项目
¶3.1 页面布局
通过修改res->layout->activity_main.xml来进行页面布局
可以在Design通过拖拽完成设计
也可以在Text通过代码实现。
我个人喜欢Design初步设计,然后通过Text细调设置。为了简单起见,使用绝对布局。
注意事项:
¶3.2 蓝牙
有两种方式,一种是会弹出提示的:
代码语言:javascript复制Intent enablelntent=new Intent(BluetoothAdapter. ACTION_REQUEST_ENABLE);
startActivityForResult(enablelntent,1);
一种是静默模式的,这种模式需要在Androidmanifest文件中添加权限(添到开头,application前):
代码语言:javascript复制<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
我是看极客学院的两个视频学习的,但是视频中的代码不能实现蓝牙串口模块的收发,只能发送不能接收,原因可能是因为同一个设备既做客户端又做服务端,然后线程冲突了。
事实上,蓝牙有两种使用方式,一种就是传统的BlueToothSocket,然后发送和接收放在两个单独的线程。还有一种是低功耗蓝牙专用的蓝牙透传。
¶3.3 WIFI
Wi-Fi Direct API主要包含如下几部分。
- WifiP2pManager类。该类中提供了允许用户发现、请求和连接其它支持Wi-Fi Direct设备的API。
- 用于监听Wi-Fi Direct请求的广播接收器。
- WifiP2pManager.WIFL_P2P_STATE_CHANGED_ACTION:检测Wi-Fi是否可用,并且将检测结果通知相应的窗口。
- WifiP2pManager.WIFL_P2P_PEERS_CHANGED_ACTION:调用WifiP2pManager.requestPeers方法获取成功连接的设备列表。
- WifiP2pManager.WIFL P2P_CONNECTION_CHANGED_ACTION:响应Wi-Fi连接状态(连接或断开)。
- WifiP2pManager.WIFL_P2P_THIS_DEVICE_CHANGED_ACTION:响应设备的Wi-Fi状态变化。
- 被Wi-Fi Direct框架检测到的事件通知,例如,终止连接、发现新的Wi-Fi Direct设备等。
¶授权
代码语言:javascript复制<uses-sdk android:minSdkVersion="14"/>
<uses-permission android:name="android.permission.ACCESS_WIFL_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFL_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
¶3.4 遇到的问题和解决
¶1. 无法创建新class
https://stackoverflow.com/questions/45497266/unable-to-parse-template-class
**解决:**Go to File->setting->editor->file and code templates, select Class in the files tab and paste this:
#if ({PACKAGE_NAME} && {PACKAGE_NAME};#end #parse("File Header.java") public class
¶四、组件布局
安卓四大组件
- Activity:Activity用于显示用户界面,用户通过Activity交互完成相关操作,一个App允许有多个Activity
- Service:Service是Android提供一个允许长时间留驻后台的一个组件,最常见的用法就是做轮询操作!或者想在后台做一些事情,比如后台下载更新!
- BroadCastReceiver:BroadcastReceiver就是应用程序间的全局大喇叭,即通信的一个手段, 系统自己在很多时候都会发送广播,比如电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播,每个APP都会收到,如果你想让你的应用在接收到 这个广播的时候做一些操作,比如:系统开机后,偷偷后台跑服务。这个时候你只需要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就做写偷偷摸摸的勾当~
- ContentProvider:我们想在自己的应用中访问别的应用,或者说一些ContentProvider暴露给我们的一些数据, 比如手机联系人,短信等!我们想对这些数据进行读取或者修改,这就需要用到ContentProvider了!或者我们自己的应用,想把自己的一些数据暴露出来,给其他的应用进行读取或操作,我们也可以用到ContentProvider,另外我们可以选择要暴露的数据,就避免了我们隐私数据的的泄露。
¶4.1 Activity
¶1. 概念
可以与用户交互的基本图形呈现单元
¶2. 三种状态
- 运行状态:可以操作
- 停止状态:不可见,比如按了home键
- 暂停状态:新的activity把后面的遮盖
¶3. 生命周期
图片来自:https://developer.android.com/reference/android/app/Activity
¶4. 常见操作
¶4.2 Service
(略)
¶4.3 Fragment
¶1. 什么是Fragment
封装布局和代码的组件
手机和平板电脑显示效果不同
¶2. 什么时候用Fragment
- 逻辑共享
- 保存状态
- 回退导航
- 整体移动
¶3. 一些注意
xml布局文件中要写包括对应的java类
onCreateView是Fragment生命周期方法中最重要的一个。因为在该方法中会创建在Fragment中显示的View。
//装载布局文件
View view=inflater.inflate(R.layout.my_fragment,null);