android学习笔记 您所在的位置:网站首页 新大陆HR22怎么连接手机 android学习笔记

android学习笔记

2024-07-15 16:30| 来源: 网络整理| 查看: 265

文章目录 一、新大陆物联网介绍及硬件端stm32准备。二、android连接云平台。2.1 导入SDK2.2 编写登录云平台首先写布局activity_login.xml文件。然后编写loginActivity.java测试 2.3 实现手机控制硬件功能activity_main.xml布局编写MainActivity.java编写测试离线测试在线测试

一、新大陆物联网介绍及硬件端stm32准备。

参考 新大陆开发文档 。 反正很牛,免费使用,还提供相关的SDK。 android SDK:新大陆安卓SDK 云平台的使用:

注册账号新添加项目。在这里插入图片描述 填好必选的输入款框。在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

按需求创建传感器,执行器。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

stm32硬件连接测试。 stm32通过esp_8266WiFi模块连接云平台。stm32连接云平台。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 测试完毕。下一步准备写android端,下发控制命令给stm32硬件端。

二、android连接云平台。 2.1 导入SDK

复制SDK到相应的工程目录 在这里插入图片描述 import module 在这里插入图片描述 找到刚刚放入本工程的SDK,导入。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在app的gradle的dependencies中添加依赖implementation project(':nlecloud-sdk')(Android studio添加依赖就是引用类库,个人理解相当于#include “xxx.h”), 在这里插入图片描述 尝试 import 我们的导入的SDK,NetWorkBusiness用来连接网络。import不提示错误表示导入成功。 在这里插入图片描述 清单文件AndroidManifest.xml中开启网络权限。 在这里插入图片描述 接下来配置网络安全。 创建一个xml文件。(才疏学浅 不懂得建全新的xml) 在这里插入图片描述 在这里插入图片描述 删除刚刚创建的xml文件中的内容,写入以下语句。

在这里插入图片描述 清单文件中添加网络安全配置。

android:networkSecurityConfig="@xml/network_security_config"

在这里插入图片描述

2.2 编写登录云平台

创建LoginActivity及activity_login.xml文件。(新建工程后refactor -rename就行) 在这里插入图片描述

首先写布局activity_login.xml文件。

在这里插入图片描述 activity_login.xml

然后编写loginActivity.java

activity中,获取相应的输入账号密码,利用netWorkBusiness 连接云平台。连接成功结束本activity,开启下一个activity(这里要新建MainActivity)

package com.example.mywifitest; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import cn.com.newland.nle_sdk.requestEntity.SignIn; import cn.com.newland.nle_sdk.responseEntity.User; import cn.com.newland.nle_sdk.responseEntity.base.BaseResponseEntity; import cn.com.newland.nle_sdk.util.NetWorkBusiness; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; public class LoginActivity extends AppCompatActivity { private EditText username; private EditText password; private Button login; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); username = findViewById(R.id.et_username); password = findViewById(R.id.et_password); login = findViewById(R.id.btn_login); login.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { signIn(); } }); } private void signIn() { String platformAddress = "http://api.nlecloud.com:80/"; final String login_UserName = username.getText().toString(); final String login_Password = password.getText().toString(); if(login_UserName.equals("")||login_Password.equals("")) { Toast.makeText(this, "请输入账号和密码!", Toast.LENGTH_SHORT).show(); return; } NetWorkBusiness netWorkBusiness = new NetWorkBusiness("", platformAddress); netWorkBusiness.signIn(new SignIn(login_UserName, login_Password), new Callback() { @Override public void onResponse(Call call, Response response) { BaseResponseEntity userBaseResponseEntity = response.body();//得到请求响应体 if(userBaseResponseEntity != null){ if(userBaseResponseEntity.getStatus() == 0){ String accessToken = userBaseResponseEntity.getResultObj().getAccessToken();//获取响应的accessToken Intent intent = new Intent(LoginActivity.this,MainActivity.class); Bundle bundle = new Bundle(); bundle.putString("accessToken",accessToken); intent.putExtras(bundle);//传递accessToken Toast.makeText(LoginActivity.this, "登录成功。", Toast.LENGTH_SHORT).show(); startActivity(intent);//开启下一个活动 finish();//介绍本次活动 } } Toast.makeText(LoginActivity.this, "登录失败,请检测账号和密码!", Toast.LENGTH_SHORT).show(); } @Override public void onFailure(Call call, Throwable t) { } }); } }

在这里插入图片描述 在这里插入图片描述

测试

开启android自带的虚拟机,测试。 在这里插入图片描述 故意打错账号测试。 在这里插入图片描述 提示账号,密码错误。 在这里插入图片描述 正常账号测试。登录成功。 在这里插入图片描述

2.3 实现手机控制硬件功能

我们传输数据给执行器pickUpCloothes,先实现stm32开发版上的led灯的控制。 stm32接收处理代码:使用stm32连接云平台。 在这里插入图片描述

activity_main.xml布局编写

在这里插入图片描述

MainActivity.java编写 package com.example.mywifitest; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.google.gson.Gson; import org.json.JSONException; import org.json.JSONObject; import cn.com.newland.nle_sdk.responseEntity.SensorInfo; import cn.com.newland.nle_sdk.responseEntity.base.BaseResponseEntity; import cn.com.newland.nle_sdk.util.NCallBack; import cn.com.newland.nle_sdk.util.NetWorkBusiness; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private static String Tag = "MainActivity"; private EditText et_deviceId; private EditText et_apiTag; private Button btn_on; private Button btn_off; private Button btn_updateSensorValue; private NetWorkBusiness netWorkBusiness; //定义sdk 服务 private static NetWorkBusiness mNetWorkBusiness; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); isOnline(); } private void isOnline() { } private void init() { et_deviceId = findViewById(R.id.et_deviceId); et_apiTag = findViewById(R.id.et_apiTag); btn_on = findViewById(R.id.btn_on); btn_off = findViewById(R.id.btn_off); btn_updateSensorValue = findViewById(R.id.btn_updateSensorValue); final Bundle bundle = getIntent().getExtras(); final String accessToken = bundle.getString("accessToken"); Toast.makeText(this, accessToken, Toast.LENGTH_SHORT).show();//显示accessToken,有个直观的感受,可以删除 Log.d(Tag,"accessToken:"+accessToken);//在debug中显示accessToken netWorkBusiness = new NetWorkBusiness(accessToken, "http://api.nlecloud.com:80/"); btn_on.setOnClickListener(this); btn_off.setOnClickListener(this); } @Override public void onClick(View v) { String deviceId=et_deviceId.getText().toString(); String apiTag=et_apiTag.getText().toString(); switch (v.getId()){ case R.id.btn_on: if(deviceId.equals("")||apiTag.equals("")){ Toast.makeText(this, "请输入设备id,及apiTag!", Toast.LENGTH_SHORT).show(); return; } control_api(deviceId,apiTag,1); break; case R.id.btn_off: if(deviceId.equals("")||apiTag.equals("")){ Toast.makeText(this, "请输入设备id,及apiTag!", Toast.LENGTH_SHORT).show(); return; } control_api(deviceId,apiTag,0); break; case R.id.btn_updateSensorValue: break; } } private void control_api(String deviceId, String apiTag, final int value) { final Gson gson = new Gson(); if(!deviceId.isEmpty()&&!apiTag.isEmpty()) netWorkBusiness.control(deviceId, apiTag, value, new NCallBack(getApplicationContext()) { @Override protected void onResponse(BaseResponseEntity response) { Log.d(Tag,"control_api响应体:" + ", gson.toJson(response):" + gson.toJson(response)); if(response != null){ if(response.getStatus()==0){ if(value == 1){ Toast.makeText(MainActivity.this, "开启成功!", Toast.LENGTH_SHORT).show(); } else if(value == 0){ Toast.makeText(MainActivity.this, "关闭成功!", Toast.LENGTH_SHORT).show(); } } else if(response.getStatus()==1) { Toast.makeText(MainActivity.this, "可能设备还未上线!", Toast.LENGTH_SHORT).show(); } } } }); } } 测试 离线测试

API调试工具模拟测试(api命令参考文档): 在这里插入图片描述 实际测试: 在这里插入图片描述 在这里插入图片描述

在线测试

在这里插入图片描述 开启 在这里插入图片描述 查看历史命令(这里没截图,按了两次开启) 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 观察到执行器已经关闭 在这里插入图片描述 可以看到历史的命令。 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有