2

我正在实现一个传感器事件监听器。

每当摇晃设备时,我都想提供一个密码屏幕。

我需要一些关于如何实施它的建议。我正在做的是我在 onShake 方法中膨胀密码布局我可以这样做吗?

密码布局应该看起来像我们在设备中使用的一般密码锁..(给出 4 位数字)

任何建议将不胜感激。

下面是我的 ShakeListener 活动

public   class ShakeListenerTestActivity extends Activity 
{
  private ShakeListener mShaker;
  private EditText password;

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);              


    mShaker = new ShakeListener(this);
    mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
      public void onShake()
      {


   Toast.makeText(ShakeListenerTestActivity.this, password.getText(),
            Toast.LENGTH_SHORT).show();

      }

    });

  }

  public void onResume()
  {
    mShaker.resume();
    super.onResume();
  }

  @Override
  public void onPause()
  {
    mShaker.pause();
    super.onPause();  
  } 
}
4

2 回答 2

0

是的,从逻辑上讲,您应该能够在 OnShake 方法中扩展布局,或者您甚至可以启动包含密码视图的活动。在 onShake 方法中,只需启动一个包含密码视图的新活动,然后根据用户的输入,您可以决定下一步该做什么!

编辑:

如何用android检测抖动事件?

看看那个&你会发现如何检测震动所以在检测到震动后你只需要开始一个新的活动:)

如果您需要更多帮助,请告诉我

编辑2:

一些代码片段我认为它会如何工作:

public class ShakeActivity extends Activity implements SensorListener

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);

sensorMgr.registerListener(this,
SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_UI);

public void onSensorChanged(int sensor, float[] values) {
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
long curTime = System.currentTimeMillis();
// only allow one update every 100ms.
if ((curTime - lastUpdate) > 100) {
long diffTime = (curTime - lastUpdate);
lastUpdate = curTime;

x = values[SensorManager.DATA_X];
y = values[SensorManager.DATA_Y];
z = values[SensorManager.DATA_Z];

float speed = Math.abs(x+y+z – last_x – last_y – last_z) / diffTime * 10000;

if (speed > SHAKE_THRESHOLD) {
Log.d(”sensor”, “shake detected w/ speed: ” + speed);
Toast.makeText(this, “shake detected w/ speed: ” + speed, Toast.LENGTH_SHORT).show();
Intent i = new Intent(this, newActivity.class);
startActivity(i);
}
last_x = x;
last_y = y;
last_z = z;
  }
 }
}

那应该可以解决您的问题!还要在 Manifest 中注册第二个活动。希望这可以帮助!

几乎上面的整个代码都来自这里,所以感谢原始海报!

于 2012-11-14T06:39:05.487 回答
0

这是在 android 中错误输入的抖动密码视图的完整代码,如在 iOS 中

Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake);
 findViewById(R.id.pwd).startAnimation(shake);

这是来自动画文件夹的shake.xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:interpolator="@anim/cycle_7"
android:toXDelta="10" />

有关更多信息,请参阅下面的链接 https://github.com/MShoaibAkram/AnimateViewOnWrongPassword

于 2018-11-06T10:49:07.170 回答