2012-11-14 43 views
2

我正在实施sensoreventlistener。Android:与密码屏幕onshake

每当设备被震动时,我想提供一个密码屏幕。

我需要一些关于如何实现它的建议。我正在做的是我夸大 密码布局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(); 
    } 
} 

回答

0

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

编辑:

How to detect shake event with 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中注册第二个活动。希望这可以帮助!

也几乎整个代码是从Here,所以感谢原创海报!

+0

@Adnana ...谢谢...如何使密码锁布局看 – teekib

+0

任何建议尝试这样做..但意图是没有启动公共无效onShake(){ vibe.vibrate(100); 意图myIntent = new Intent(ShakeListenerTestActivity.this,passwordActivity.class); ShakeListenerTestActivity.this.startActivity(myIntent); Toast.makeText(ShakeListenerTestActivity.this,password.getText(), \t \t \t Toast.LENGTH_SHORT).show(); } }); – teekib

+0

你如何检测运动?您需要使用加速计来检测手机的移动。看看我的答案中的链接。我现在编辑它。 –