Dans le programme précédent, le temps de retard était réglé à 500 millisecondes, mais lors de la mesure de la valeur du capteur d'accélération, il a été amélioré afin que le retard puisse être ajusté par vous-même afin de raccourcir le temps de retard lors de la détection de mouvement. ..
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
Veuillez noter que cela ne fonctionnera que si vous ajoutez l'autorisation d'utiliser Internet à AndroidManifest.xml. (2 pertes)
activity_main.xml
<EditText
android:id="@+id/IP_Address"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="52dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textPersonName"
android:text="192.168.0."
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/Port"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="48dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:inputType="textPersonName"
android:text="8080"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/IP_Address" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="280dp"
android:text="X:"
android:textSize="32sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Y:"
android:textSize="32sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Z:"
android:textSize="32sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />
<TextView
android:id="@+id/X_Data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="280dp"
android:text="TextView"
android:textSize="32sp"
app:layout_constraintStart_toEndOf="@+id/textView"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/Y_Data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="TextView"
android:textSize="32sp"
app:layout_constraintStart_toEndOf="@+id/textView2"
app:layout_constraintTop_toBottomOf="@+id/X_Data" />
<TextView
android:id="@+id/Z_Data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="TextView"
android:textSize="32sp"
app:layout_constraintStart_toEndOf="@+id/textView3"
app:layout_constraintTop_toBottomOf="@+id/Y_Data" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="230dp"
android:text="Valeur du capteur d'accélération"
android:textSize="32sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/Ran"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="87dp"
android:layout_marginLeft="87dp"
android:layout_marginBottom="70dp"
android:text="Commencer la communication"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginBottom="8dp"
android:text="adresse IP"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/IP_Address"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginBottom="8dp"
android:text="numéro de port"
android:textSize="24sp"
app:layout_constraintBottom_toTopOf="@+id/Port"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/End"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="87dp"
android:layout_marginRight="87dp"
android:layout_marginBottom="70dp"
android:text="Annulation de la communication"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/LED1"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginStart="100dp"
android:layout_marginLeft="100dp"
android:layout_marginBottom="150dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/en" />
<ImageView
android:id="@+id/LED2"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginEnd="100dp"
android:layout_marginRight="100dp"
android:layout_marginBottom="150dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:srcCompat="@drawable/en" />
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="352dp"
android:layout_marginEnd="124dp"
android:layout_marginRight="124dp"
android:text="Delay"
android:textSize="32sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/Delay"
android:layout_width="159dp"
android:layout_height="49dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="40dp"
android:layout_marginRight="40dp"
android:ems="10"
android:inputType="textPersonName"
android:text="100"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView6" />
La mise en page ressemble à ceci
MainActivity.java
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager sensorManager;
private TextView X_Data_TextView; //Valeur X du capteur d'accélération
private TextView Y_Data_TextView; //Valeur Y du capteur d'accélération
private TextView Z_Data_TextView; //Valeur Z du capteur d'accélération
private float data_X,data_Y,data_Z;
private String Data;
private Timer timer1,timer2;
private mTimerTask1 timerTask1;
private mTimerTask2 timerTask2;
private Handler handler = new Handler();
private Handler handler1 = new Handler();
private long Delay;
ImageView LED1,LED2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
X_Data_TextView = findViewById(R.id.X_Data);
Y_Data_TextView = findViewById(R.id.Y_Data);
Z_Data_TextView = findViewById(R.id.Z_Data);
LED1 = findViewById(R.id.LED1);
LED2 = findViewById(R.id.LED2);
LED1.setImageResource(R.drawable.en);
LED2.setImageResource(R.drawable.en);
Button ran = findViewById(R.id.Ran);
Button end = findViewById(R.id.End);
ran.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(null != timer1){
timer1.cancel();
timer1 = null;
}
String delay = ((EditText)findViewById(R.id.Delay)).getText().toString();
Delay = Long.parseLong(delay);
timer1 = new Timer();
timerTask1 = new mTimerTask1();
timer1.schedule(timerTask1,0, Delay);
timer2 = new Timer();
timerTask2 = new mTimerTask2();
timer2.schedule(timerTask2,0,Delay);
}
});
end.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(null != timer1){
timer1.cancel();
timer1 = null;
}
final String address = ((EditText) findViewById(R.id.IP_Address)).getText().toString();
String port = ((EditText) findViewById(R.id.Port)).getText().toString();
int Port = Integer.parseInt(port);
String exit = "exit";
byte buf[] = new byte[exit.length()];
try {
buf = exit.getBytes("SHIFT_JIS");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
InetSocketAddress inetSocketAddress = new InetSocketAddress(address, Port);
final DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, inetSocketAddress);
AsyncTask<DatagramPacket, Void, Void> task = new AsyncTask<DatagramPacket, Void, Void>() {
@Override
protected Void doInBackground(DatagramPacket... datagramPackets) {
DatagramSocket datagramSocket = null;
try {
datagramSocket = new DatagramSocket();
datagramSocket.send(datagramPackets[0]);
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
};
task.execute(datagramPacket);
}
});
}
@Override
protected void onResume(){
super.onResume();
//Inscription à l'écouteur d'événements
Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener((SensorEventListener) this,accel,SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause(){
super.onPause();
//Écouteur d'événement non enregistré
sensorManager.unregisterListener((SensorEventListener) this);
}
@Override
public void onSensorChanged(SensorEvent event){
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
X_Data_TextView.setText(String.format("%.3f",500+(event.values[0])*25));
Y_Data_TextView.setText(String.format("%.3f",500+(event.values[1])*25));
Z_Data_TextView.setText(String.format("%.3f",500+(event.values[2]) *25));
Data = (500+event.values[0]*25) + " " +
(500+event.values[1]*25) + " " +
(500+event.values[2]*25);
data_X= (500+event.values[0]*25);
data_Y= (500+event.values[1]*25);
data_Z= (500+event.values[2]*25);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy){
}
private class mTimerTask2 extends TimerTask{
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
if (data_X >= 700) {
LED1.setImageResource(R.drawable.en_gleen);
} else if (data_X <= 300) {
LED1.setImageResource(R.drawable.en);
} else if (data_Y >= 700) {
LED2.setImageResource(R.drawable.en_red);
} else if (data_Y <= 300) {
LED2.setImageResource(R.drawable.en);
} else if (data_Z >= 700) {
LED1.setImageResource(R.drawable.en_gleen);
LED2.setImageResource(R.drawable.en_red);
} else if (data_Z <= 300) {
LED1.setImageResource(R.drawable.en);
LED2.setImageResource(R.drawable.en);
}
}
});
}
}
private class mTimerTask1 extends TimerTask{
@Override
public void run(){
handler.post(new Runnable() {
@Override
public void run() {
final String address = ((EditText) findViewById(R.id.IP_Address)).getText().toString();
String port = ((EditText) findViewById(R.id.Port)).getText().toString();
int Port = Integer.parseInt(port);
byte buf[] = new byte[Data.length()];
try {
buf = Data.getBytes("SHIFT_JIS");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
InetSocketAddress inetSocketAddress = new InetSocketAddress(address, Port);
final DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length, inetSocketAddress);
AsyncTask<DatagramPacket, Void, Void> task = new AsyncTask<DatagramPacket, Void, Void>() {
@Override
protected Void doInBackground(DatagramPacket... datagramPackets) {
DatagramSocket datagramSocket = null;
try {
datagramSocket = new DatagramSocket();
datagramSocket.send(datagramPackets[0]);
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
};
task.execute(datagramPacket);
}
});
}
}
}