From 1c0593c996c2cb3f39c318252ac945b5e4ed4515 Mon Sep 17 00:00:00 2001 From: SherVegas Date: Thu, 29 Jul 2021 09:11:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E5=9C=B0?= =?UTF-8?q?=E5=9D=80=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nsgk/ruralWeb/FullscreenActivity.java | 20 ++- .../nsgk/ruralWeb/SensorManagerHelper.java | 114 ++++++++++++++++++ 2 files changed, 130 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/nsgk/ruralWeb/SensorManagerHelper.java diff --git a/app/src/main/java/com/nsgk/ruralWeb/FullscreenActivity.java b/app/src/main/java/com/nsgk/ruralWeb/FullscreenActivity.java index 0a9442e..a5f719b 100644 --- a/app/src/main/java/com/nsgk/ruralWeb/FullscreenActivity.java +++ b/app/src/main/java/com/nsgk/ruralWeb/FullscreenActivity.java @@ -1,17 +1,17 @@ package com.nsgk.ruralWeb; import android.annotation.SuppressLint; - -import androidx.appcompat.app.AppCompatActivity; - import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.EditText; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; -import com.nsgk.ruralWeb.databinding.ActivityFullscreenBinding; /** * An example full-screen activity that shows and hides the system UI (i.e. @@ -21,6 +21,8 @@ public class FullscreenActivity extends AppCompatActivity { private WebView mWebView; + private SensorManagerHelper sensorManagerHelper; + @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,8 +39,18 @@ public class FullscreenActivity extends AppCompatActivity { return false; } }); + EditText textView = new EditText(this); + + AlertDialog alertDialog = new AlertDialog.Builder(this) + .setView(textView) + .setTitle("修改地址") + .setPositiveButton("确定", (dialogInterface, i) -> mWebView.loadUrl("http://"+textView.getText().toString())) + .create(); + mWebView.loadUrl("http://www.baidu.com"); + sensorManagerHelper = new SensorManagerHelper(this); + sensorManagerHelper.setOnShakeListener(alertDialog::show); } @Override diff --git a/app/src/main/java/com/nsgk/ruralWeb/SensorManagerHelper.java b/app/src/main/java/com/nsgk/ruralWeb/SensorManagerHelper.java new file mode 100644 index 0000000..93a1e28 --- /dev/null +++ b/app/src/main/java/com/nsgk/ruralWeb/SensorManagerHelper.java @@ -0,0 +1,114 @@ +package com.nsgk.ruralWeb; + +import android.content.Context; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; + +public class SensorManagerHelper implements SensorEventListener { + + // 速度阈值,当摇晃速度达到这值后产生作用 + private final int SPEED_SHRESHOLD = 5000; + // 两次检测的时间间隔 + private final int UPTATE_INTERVAL_TIME = 50; + // 传感器管理器 + private SensorManager sensorManager; + // 传感器 + private Sensor sensor; + // 重力感应监听器 + private OnShakeListener onShakeListener; + // 上下文对象context + private Context context; + // 手机上一个位置时重力感应坐标 + private float lastX; + private float lastY; + private float lastZ; + // 上次检测时间 + private long lastUpdateTime; + + public SensorManagerHelper(Context context) { + this.context = context; + start(); + } + + /** + * 开始检测 + */ + public void start() { + // 获得传感器管理器 + sensorManager = (SensorManager) context + .getSystemService(Context.SENSOR_SERVICE); + if (sensorManager != null) { + // 获得重力传感器 + sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); + } + // 注册 + if (sensor != null) { + sensorManager.registerListener(this, sensor, + SensorManager.SENSOR_DELAY_GAME); + } + } + + /** + * 停止检测 + */ + public void stop() { + sensorManager.unregisterListener(this); + } + + /** + * 摇晃监听接口 + */ + public interface OnShakeListener { + void onShake(); + } + + /** + * 设置重力感应监听器 + */ + public void setOnShakeListener(OnShakeListener listener) { + onShakeListener = listener; + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + } + + /** + * 重力感应器感应获得变化数据 + * android.hardware.SensorEventListener#onSensorChanged(android.hardware + * .SensorEvent) + */ + @Override + public void onSensorChanged(SensorEvent event) { + // 现在检测时间 + long currentUpdateTime = System.currentTimeMillis(); + // 两次检测的时间间隔 + long timeInterval = currentUpdateTime - lastUpdateTime; + // 判断是否达到了检测时间间隔 + if (timeInterval < UPTATE_INTERVAL_TIME) return; + // 现在的时间变成last时间 + lastUpdateTime = currentUpdateTime; + // 获得x,y,z坐标 + float x = event.values[0]; + float y = event.values[1]; + float z = event.values[2]; + // 获得x,y,z的变化值 + float deltaX = x - lastX; + float deltaY = y - lastY; + float deltaZ = z - lastZ; + // 将现在的坐标变成last坐标 + lastX = x; + lastY = y; + lastZ = z; + double speed = Math.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ + * deltaZ) + / timeInterval * 10000; + // 达到速度阀值,发出提示 + if (speed >= SPEED_SHRESHOLD) { + onShakeListener.onShake(); + } + } +} +