第一个Android things应用

上一篇博客完成了 的搭建,按照国际惯例,该来个hello word应用了,还好这一切都在 中进行,对于安卓软件开发人员来讲,应该是很熟悉的 。
打开 ,选择新建一个项目,填名字、包名 。
下一步,只选择 ,API版本最好和你的树莓派刷入的版本一致,这些信息都可以外接屏幕和鼠标查看 。

第一个Android things应用

文章插图
下一步,选择 ,因为很多的智能设备是不需要界面的,选择Empty 的话还是会自动生成界面,并的 。
第一个Android things应用

文章插图
之后的页面用默认值就可以了:
第一个Android things应用

文章插图
生成的新的项目相比较普通的安卓项目简单很多,少了很多文件和文件夹 。先不管这些,先开始的编写 。
【第一个Android things应用】第一个 的应用要实现一个闪烁的led灯,官方的例子也是这样的 。不过还是推荐大家直接自己创建项目并手敲以下代码,因为第一个项目都很简单 。
,首先是,定义几个量:
Handler handler=new Handler();//用于循环操作Gpio gpio;//通用输入输出端口boolean ledState=false;//用于标记led的亮起状态
这里只有一个新的东西:Gpio,通用输入输出 。可能这个对安卓软件开发者比较陌生,可以直接理解成一个led灯对象;
然后是的方法:
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接ledgpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;handler.post(runnable);//开始循环} catch (IOException e) {e.printStackTrace();}}
这里相当于是通过“BCM21”这个接口,打开为一个设备,设置这个设备的方向是out,即为输出设备,同时指定了这个输出设备的初始值为low,Gpio通用输入输出是二进制的,相当于只有0/1两种值,对于led灯来说,只有亮和不亮两种状态 。然后是:
Runnable runnable=new Runnable() {@Overridepublic void run() {if (gpio==null)return;try {ledState=!ledState;//改变led状态gpio.setValue(ledState);//控制led状态handler.postDelayed(this,1000);//1秒后再执行本初操作} catch (IOException e) {e.printStackTrace();}}};
因为设备已经定义为输出设备,是不能读取led灯的状态的,所以我们为了达到闪烁的目的,通过本地一个值标识led灯的状态,每次循环只要让等的状态改变就可以了 。亮灯与否就很简单的,led灯对象gpio直接设置值为true或者fale即可 。
最后,在中释放掉资源:
@Overrideprotected void onDestroy() {super.onDestroy();handler.removeCallbacks(runnable);//停止循环try {gpio.close();//关闭通用输入输出} catch (IOException e) {e.printStackTrace();}}
整个代码如下:
package wang.buxiang.myandroidthings;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import com.google.android.things.pio.Gpio;import com.google.android.things.pio.PeripheralManager;import java.io.IOException;public class MainActivity extends Activity {Handler handler=new Handler();//用于循环操作Gpio gpio;//通用输入输出端口boolean ledState=false;//用于标记led的亮起状态@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);try {gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接ledgpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;handler.post(runnable);//开始循环} catch (IOException e) {e.printStackTrace();}}@Overrideprotected void onDestroy() {super.onDestroy();handler.removeCallbacks(runnable);//停止循环try {gpio.close();//关闭通用输入输出} catch (IOException e) {e.printStackTrace();}}Runnable runnable=new Runnable() {@Overridepublic void run() {if (gpio==null)return;try {ledState=!ledState;//改变led状态gpio.setValue(ledState);//控制led状态handler.postDelayed(this,1000);//1秒后再执行本初操作} catch (IOException e) {e.printStackTrace();}}};}