Sisteme İlişkin Bazı Elemanların Ele Alınması
Android işletim sistemi üzerinde bir takım elemanlar programcı tarafından kontrol edilmektedir.
Back Tuşunun Ele Alınması
Programcının herhangi bir activity için geri tuşuna basılıp basılmadağını algılayabilir.
Programcı bu tuşu ele alabilmek için onBackPressed
isimli metodu override etmelidir.
@Override
public void onBackPressed()
{
Toast.makeText(this , "Back Pressed" , Toast.LENGTH_SHORT).show();
super.onBackPressed();
}
onBackPressed
metodunun taban sınıftaki versiyonu ilgili activity için finish metodunun çağrılması demektir.
Örneğin geri tuşuna basıldığı zaman home tuşuna basıldı izlenimi veren bir kod aşağıdaki gibi oluşturulabilir.
@Override
public void onBackPressed()
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategorty(Intent.CATEGORY_HOME);
this.startActivity(intent);
}
Burada Intent ismi ACTION_MAIN
olan kategori ismi CATEGORY_HOME
olan bir intent ile activity başlatılmalıdır.
Bu intentin herhangi bir buton için örneği aşağıdaki gibidir.
@Override
public void onHomeButtonClicked(View v)
{
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategorty(Intent.CATEGORY_HOME);
this.startActivity(intent);
}
Key Eventleri
Klavye veya çeşitli tuşlara basıldığı keyeventleri ile anlaşılabilmektedir.
Bunun için onKeyXXX
metodları kullanılmaktadır.
@Override
public void onBackPressed()
{
//super.onBackPressed();
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
Toast.makeText(this, "Up", Toast.LENGTH_SHORT).show();
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event)
{
Toast.makeText(this, "Long", Toast.LENGTH_SHORT).show();
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
Toast.makeText(this, "Down", Toast.LENGTH_SHORT).show();
return super.onKeyDown(keyCode, event);
}
Keyevent parametreleri o olaya ilişkin çeşitli bilgiler vermektedir.Keyevent sınıfın getDownTime
metodu tuşa basılmanın gerçekliştiği zamana ilişkin long değeri vermektedir. getEventTime
metodu ise o eventin mesaj kuyruğuna atılma zamanını vermektedir.
Buna göre iki eventin arasında geçen zaman nasıl ölçülebilir? Bu metodlar arkaplanda SystemClock sınıfının upTimeMillis
isimli metodunu çağırmaktadır.Bu metod cihazın boot edildiği zamandan itibaren geçen milisaniye sayısını vermektedir.
Programcı iki zaman arasındaki farkı bu metodlarla ölçebilir.
@Override
public void onBackPressed()
{
//super.onBackPressed();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
m_downTime = SystemClock.uptimeMillis();
Toast.makeText(this, "onKeyDown", Toast.LENGTH_SHORT).show();
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
m_upTime = SystemClock.uptimeMillis();
String report = "";
report += "keyDown arası süre:" + ((m_upTime - m_downTime) / 1000.) + "\n";
report += "Basılı kalan süre:" + ((m_upTime - m_keyPressDownTime) / 1000.);
m_textViewReport.setText(report);
Toast.makeText(this, "DownTime:" + m_downTime, Toast.LENGTH_LONG).show();
Toast.makeText(this, "KeyPressTime:" + m_keyPressDownTime, Toast.LENGTH_LONG).show();
Toast.makeText(this, "upTime:" + m_upTime, Toast.LENGTH_LONG).show();
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event)
{
m_keyPressDownTime = SystemClock.uptimeMillis();
Toast.makeText(this, "onKeyLongPress", Toast.LENGTH_SHORT).show();
return super.onKeyLongPress(keyCode, event);
}
Anahtar Notlar:
Java SE kütüphanesinde System sınıfı altında currentMiliSeconds
metodu vardır.
Bu metod da çağrıldığı zamanla sistemin boot edildiği zaman arasındaki milisaniye farkını döndürür.
keyUp keyPressed keyDown gibi event metodları tüm tuş mekanizmaları için çalışmaktadır.
Back tuşuna basıldığında yapılan işlemler aşağıdaki koddaki gibi basit bir şekilde gerçekleştirilebilir.
@Override
public boolean onKeyUp(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK) {
m_upTime = SystemClock.uptimeMillis();
String report = "";
report += "keyDown arası süre:" + ((m_upTime - m_downTime) / 1000.) + "\n";
report += "Basılı kalan süre:" + ((m_upTime - m_keyPressDownTime) / 1000.);
m_textViewReport.setText(report);
Toast.makeText(this, "DownTime:" + m_downTime, Toast.LENGTH_LONG).show();
Toast.makeText(this, "KeyPressTime:" + m_keyPressDownTime, Toast.LENGTH_LONG).show();
Toast.makeText(this, "upTime:" + m_upTime, Toast.LENGTH_LONG).show();
return true;
}
//...
return super.onKeyUp(keyCode, event);
}
KeyEvent sınıfın keyCodeToString
metodu ile sabitin yazısal karşıtı elde edilebilir.
Burada dikkat edilirse tuşlara ilişkin herhangi bir tablo kodu yoktur.Çünkü tüm tuşların unicode tablosunda olması gerekmez. Unicode tablosuna ilişkin kodları tuşlardan gelen kodlarla eşleştirmeyi programcı yapmalıdır.