Vibration added.

TODO: Write / Fetch Database Values & Calculate Time Difference
This commit is contained in:
Patrick Halboth 2021-06-18 18:52:54 +02:00
parent 29e1070b73
commit b60c167cc8
2 changed files with 86 additions and 2 deletions

View File

@ -10,7 +10,7 @@
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/schockicon"

View File

@ -1,14 +1,20 @@
package de.edotzlaff.schockwelle;
import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.VibrationEffect;
import android.os.Vibrator;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentActivity;
@ -52,6 +58,9 @@ public class SensorMapsActivity extends FragmentActivity implements OnMapReadyCa
private DatabaseReference mDatenbank;
//Vibration
private Boolean mDeviceCanVibrate = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -63,9 +72,10 @@ public class SensorMapsActivity extends FragmentActivity implements OnMapReadyCa
getDataBaseValues(); // Hier werden die Daten von der DB abgefragt //TODO Edward: Geht wieder :D
getVibrationAbility();
//distance(currentLocation.getLatitude(), currentLocation.getLongitude(),breitengrad,laengengrad); //Übergabe zur Berechnung der Distanz zwischen Auslöser und aktuellem Standort
//TODO Patrick: die Funktion distance gibt Meter zurück, könntest Du das mit dem Zeitstempel und der Berechnung bis zur Vibration machen?
setVibrationTimer(10000,1000,255);
}
private void getLocationPermission() {
@ -78,6 +88,80 @@ public class SensorMapsActivity extends FragmentActivity implements OnMapReadyCa
}
}
private void getVibrationAbility()
{
// Get instance of Vibrator from current Context
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Output yes if can vibrate, no otherwise
if (v.hasVibrator()) {
Log.v("Can Vibrate", "YES");
// Log.v("Can Control Amplitude", v.hasAmplitudeControl() ? "YES" : "NO");
mDeviceCanVibrate = true;
}
else
{
Log.v("Can Vibrate", "NO");
mDeviceCanVibrate = false;
}
}
private long getTimeStampDifference(Date vibrationTime)
{
long diff= 0;
//TODO Zeitdifferenz in Millisekunden zwischen aktuellen Uhrzeit und Vibratonszeitstempel berechnen
return diff;
}
private void setVibrationTimer(long msDelay, int duration, int amplitude)
{
new CountDownTimer(msDelay, 1000) {
public void onTick(long millisUntilFinished) {
((TextView) findViewById(R.id.txtSensor)).setText("Earthquake hits in " + millisUntilFinished / 1000 + " s");
}
public void onFinish() {
Toast.makeText(getApplicationContext(), "The Ground is shaking!", Toast.LENGTH_SHORT).show();
performVibration(duration, amplitude);
( (TextView) findViewById(R.id.txtSensor)).setText("No Earthquake upcoming");
}
}.start();
}
public void performVibration(int duration, int amplitude) {
if(!mDeviceCanVibrate)
return;
Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
if (Build.VERSION.SDK_INT >= 26) {
if(duration == 0)
{
v.cancel(); //stop vibration if still running
Toast.makeText(this, "Vibration has been stopped", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(this, "Ampl: " + amplitude + ", Dur: " + duration, Toast.LENGTH_SHORT).show();
v.vibrate(VibrationEffect.createOneShot(duration,amplitude));
} else {
if(duration == 0)
{
v.cancel(); //stop vibration if still running
return;
}
v.vibrate(duration);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);