2012-11-14 75 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

你如何檢測運動?您需要使用加速計來檢測手機的移動。看看我的答案中的鏈接。我現在編輯它。 –