安卓源码运行必须更换android studio 默认gradle文件夹
build.gradle换为
plugins {
id 'com.android.application' version '7.2.0' apply false
id 'com.android.library' version '7.2.0' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
settings.gradle加上阿里云
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
maven {
allowInsecureProtocol = true
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
maven {
allowInsecureProtocol = true
url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
}
maven {
allowInsecureProtocol = true
url 'http://maven.aliyun.com/nexus/content/repositories/google'
}
maven {
allowInsecureProtocol = true
url 'http://maven.aliyun.com/nexus/content/repositories/gradle-plugin'
}
google()
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
安卓MainActivity.java
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Vibrator;
import android.text.method.LinkMovementMethod;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import java.util.Random;
public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
ImageButton up ;
ImageButton down ;
ImageButton left ;
ImageButton right;
ImageButton stop ;
Context app;
String url, IPstring;
EditText ip;
sendreq Sendreq;
AlertDialog alertDialog;
TextView speed;
int x ;
View dialogView;
View cns;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
app = this;
Sendreq = new sendreq();
cns=findViewById(R.id.cns);
up = findViewById(R.id.arrow_up);
down = findViewById(R.id.arrow_down);
left = findViewById(R.id.arrow_left);
right = findViewById(R.id.arrow_right);
stop = findViewById(R.id.stop);
ip = findViewById(R.id.editIp);
up.setOnTouchListener(this);
down.setOnTouchListener(this);
left.setOnTouchListener(this);
right.setOnTouchListener(this);
stop.setOnTouchListener(this);
IPstring = ip.getText().toString();
url = "http://" + IPstring + "/";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.info:
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
ViewGroup viewGroup = findViewById(android.R.id.content);
dialogView = LayoutInflater.from(app).inflate(R.layout.customview, viewGroup, false);
TextView gitlink =dialogView.findViewById(R.id.gitlink);
gitlink.setMovementMethod((LinkMovementMethod.getInstance()));
TextView linkgmail =dialogView.findViewById(R.id.gmail);
linkgmail.setMovementMethod((LinkMovementMethod.getInstance()));
linkgmail.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Intent email=new Intent(Intent.ACTION_SENDTO).setData(Uri.parse("mailto:rawat.prateek05@gmail.com"));
startActivity(email);
}
});
builder.setView(dialogView);
alertDialog = builder.create();
builder.show();
break;
default:
break;
}
return true;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
Vibrator vb = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (event.getAction() == MotionEvent.ACTION_DOWN){
vb.vibrate(100);}
switch (v.getId()) {
case R.id.arrow_up:
if (event.getAction() == MotionEvent.ACTION_DOWN){
up.setBackgroundResource(R.drawable.arrow_up_pressed);
Sendreq.posst(url, "F", v,app);}
else if (event.getAction() == MotionEvent.ACTION_UP)
{ up.setBackgroundResource(R.drawable.arrow_up);
Sendreq.posst(url, "S",v,app);}
break;
case R.id.arrow_down:
if (event.getAction() == MotionEvent.ACTION_DOWN)
{down.setBackgroundResource(R.drawable.arrow_down_pressed);
Sendreq.posst(url, "B", v,app);}
else if (event.getAction() == MotionEvent.ACTION_UP)
{Sendreq.posst(url, "S", v,app);
down.setBackgroundResource(R.drawable.arrow_down);}
break;
case R.id.arrow_left:
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
left.setBackgroundResource(R.drawable.arrow_left_pressed);
Sendreq.posst(url, "L", v,app);}
else if (event.getAction() == MotionEvent.ACTION_UP) {
Sendreq.posst(url, "S", v, app);
left.setBackgroundResource(R.drawable.arrow_left);
}
break;
case R.id.arrow_right:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Sendreq.posst(url, "R", v, app);
right.setBackgroundResource(R.drawable.arrow_right_pressed);
}
else if (event.getAction() == MotionEvent.ACTION_UP) {
Sendreq.posst(url, "S", v, app);
right.setBackgroundResource(R.drawable.arrow_right);
}
break;
case R.id.stop:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
stop.setBackgroundResource(R.drawable.stop_pressed);
Sendreq.posst(url, "S", v,app);}
else if (event.getAction() == MotionEvent.ACTION_UP)
stop.setBackgroundResource(R.drawable.stop);
break;
default:
}
return true;
}
}
sendreg.java
import android.content.Context;
import android.util.Log;
import android.view.View;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.material.snackbar.Snackbar;
import java.util.HashMap;
import java.util.Map;
public class sendreq {
public void posst(final String url, final String par, final View v,final Context ctx) {
RequestQueue queue = Volley.newRequestQueue(ctx);
StringRequest sr = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.e("HttpClient", "success! response: " + response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Snackbar.make(v, R.string.error, Snackbar.LENGTH_LONG).show();
}
})
{
@Override
protected Map<String,String> getParams(){
Map<String,String> params = new HashMap<String, String>();
params.put("State",par);
return params;
}
};
queue.add(sr);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cns"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="#2B2B2B">
<ImageButton
android:id="@+id/arrow_up"
android:layout_width="102dp"
android:layout_height="102dp"
android:layout_marginTop="100dp"
android:background="@drawable/arrow_up"
android:foregroundGravity="center"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toStartOf="@+id/guideline_right"
app:layout_constraintStart_toStartOf="@+id/guideline_left"
app:layout_constraintTop_toTopOf="parent" />
<ImageButton
android:id="@+id/stop"
android:layout_width="72dp"
android:layout_height="72dp"
android:background="@drawable/stop"
android:foregroundGravity="center"
app:layout_constraintBottom_toTopOf="@+id/arrow_down"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toStartOf="@+id/arrow_right"
app:layout_constraintStart_toEndOf="@+id/arrow_left"
app:layout_constraintTop_toBottomOf="@+id/arrow_up" />
<ImageButton
android:id="@+id/arrow_down"
android:layout_width="102dp"
android:layout_height="102dp"
android:background="@drawable/arrow_down"
android:foregroundGravity="center"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toStartOf="@+id/guideline_right"
app:layout_constraintHorizontal_bias="0.502"
app:layout_constraintStart_toStartOf="@+id/guideline_left"
app:layout_constraintTop_toBottomOf="@+id/arrow_left"
app:layout_constraintVertical_bias="0.0" />
<ImageButton
android:id="@+id/arrow_right"
android:layout_width="100dp"
android:layout_height="103dp"
android:background="@drawable/arrow_right"
android:foregroundGravity="center"
app:layout_constraintBottom_toTopOf="@+id/guideline3"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toStartOf="@+id/guideline_right"
app:layout_constraintHorizontal_bias="0.985"
app:layout_constraintStart_toStartOf="@+id/guideline_left"
app:layout_constraintTop_toTopOf="@+id/guideline2"
app:layout_constraintVertical_bias="0.578" />
<ImageButton
android:id="@+id/arrow_left"
android:layout_width="102dp"
android:layout_height="102dp"
android:background="@drawable/arrow_left"
android:foregroundGravity="center"
app:layout_constraintBottom_toTopOf="@+id/guideline3"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintEnd_toStartOf="@+id/arrow_right"
app:layout_constraintHorizontal_bias="0.019"
app:layout_constraintStart_toStartOf="@+id/guideline_left"
app:layout_constraintTop_toTopOf="@+id/guideline2"
app:layout_constraintVertical_bias="0.579" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.125" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.875" />
<EditText
android:id="@+id/editIp"
android:layout_width="158dp"
android:layout_height="48dp"
android:layout_marginTop="32dp"
android:ems="10"
android:hint="@string/_0_0_0_0"
android:inputType="textPersonName"
android:text="@string/_192_168_4_1"
android:textColor="@color/blue"
android:textColorHighlight="#FFFFFF"
android:textColorLink="#FFFFFF"
app:layout_constraintBottom_toTopOf="@+id/arrow_up"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.018"
app:layout_constraintStart_toEndOf="@+id/ip"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/ip"
android:layout_width="158dp"
android:layout_height="48dp"
android:layout_marginStart="40dp"
android:layout_marginLeft="40dp"
android:layout_marginTop="32dp"
android:gravity="center"
android:text="@string/ip_address"
android:textColor="@color/blue"
android:textColorHighlight="#FFFFFF"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="20dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="436dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
esp8266 Arduino 模块用的是esp2.7.4
ino源码为
#define IN_4 0 // esp8266接继电器针脚 GPIO0(D3)
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ctype.h>
String command; //String to store app command state.
const char* ssid = "Android light";
ESP8266WebServer server(80);
void setup() {
pinMode(IN_4, OUTPUT);
Serial.begin(9600);
// Connecting WiFi
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid);
delay(6000);
Serial.print("AP IP address: ");
Serial.println(WiFi.softAPIP());
// Starting WEB-server
server.on ( "/", HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
}
void goRight(){
digitalWrite(IN_4, HIGH);
}
void goLeft(){
digitalWrite(IN_4, LOW);
}
void loop() {
server.handleClient();
command = server.arg("State");
char C=command.charAt(0);
if(C>'A'&& C<'Z')
{
switch(C){
case 'L':goLeft();
break;
case 'R':goRight();
break;
}
}
}
void HTTP_handleRoot(void) {
if( server.hasArg("State") ){
Serial.println(server.arg("State"));
}
server.send ( 200, "text/html", "" );
delay(1);
}