Android programlama öğrenmeye devam ediyoruz. Bu derste intent filtrenin çalışması daha iyi anlamak için bir uygulamayı geliştireceğiz.
Geçen derslerimizde Intent ve klası kullanarak etkileşimi (Activity) çağırması öğrendik. Bu derste ikinci yöntemi kullanacağız; gizli niyet (Implicit Intent). Gizli niyet ile, action (faaliyet), data (veri) ve category (grup, sınıf) değerlere göre etkileşimler çağrılabilir. Konuyu hatırlamak için 20’ci dersi tavsiye ederim. Uygulamamız saati ve tarihi gösterecek. Bunu yapmak için üç tane etkileşimi (Activity) kullanacağız. Birinci etkileşim iki butonundan oluşacak. Birinci buton saati (Show time) ve ikinci tarihi (Show date) göstermek için kullanılacak. İkinci etkileşim saati gösterecek. Üçüncü etkileşim tarihi gösterecek. Projeyi oluşturalım:
- Project name: P0028_IntentFilter
- Build Target: Android 4.2
- Application name: IntentFilter
- Package name: tr.example.IntentFilter
- Create Activity: MainActivity
Main.xml aşağıdaki kodla dolduralım:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnTime" android:text="Show time"> </Button> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnDate" android:text="Show date"> </Button> </LinearLayout>
Sonraki aşamada MainActivity.java’yı aşağıdaki kodla dolduruyoruz.
public class MainActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btnTime = (Button) findViewById(R.id.btnTime); Button btnDate = (Button) findViewById(R.id.btnDate); btnTime.setOnClickListener(this); btnDate.setOnClickListener(this); } @Override public void onClick(View v) { Intent intent; switch(v.getId()) { case R.id.btnTime: intent = new Intent("tr.technopat.intent.action.showtime"); startActivity(intent); break; case R.id.btnDate: intent = new Intent("tr.technopat.intent.action.showdate"); startActivity(intent); break; } } }
Yukarıdaki kodda iki butonu belirttik ve işletici olarak etkileşimi (Activity) kullandık. OnClick metodunda basılan butonu buluyoruz ve Intent’i oluşturuyoruz. Intent’i oluşturmak için Intent (String action) tasarımcıyı kullanıyoruz. Intent nesnenin niteliği action (faaliyet). Action niteliğin amacı kullanıcının istediği faaliyeti belirtmektir. Mesela ACTION_VIEW – görünüm, ACTION_EDIT – kurgu, ACTION_PICK – listeden seçmek, ACTION_DIAL – telefondan arama. Eğer faaliyeti (eylem) bir şeyle yapılıyorsa action ile beraber data (veri) parametre kullanılıyor. Yani action ne yapılması ve data neyle yapılmasını belirtiyor. Data hakkında gelecek derslerimizde daha ayrıntılı bahsedeceğiz. Kodda gördüğünüz gibi
tr.technopat.intent.action.showtimetr.technopat.intent.action.showdate
eylemleri (action) kullandım. Birinci saati gösteren etkileşimi (Activity) ve ikinci tarihi gösteren etkileşimi çağıracak, tr.technopat satırının amacı tekel ismi belirtmektir. Çünkü sistemde birden fazla intent.action.showtime komutu kullanılan uygulama olabilir. Intent ve action oluşturduktan sonra etkileşimi (Activity) oluşturmamız gerekiyor. Etkileşimi oluştururken Intent action ile aynı action belirtmemiz gerekecektir. Etkileşimin oluşumu 19’cu derste ayrıntılı açıklanıyor. Oluşturduktan sonra AndroidManifest.xml dosyasında etkileşimleri belirtiyoruz. Sonraki aşamada aynı yerde ActivityTime dosyayı seçiyoruz Add butonuna basıyoruz ve IntentFilter seçildikten sonra Ok basıyoruz.
IntentFilter’de action oluşturuyoruz ve name (İsim) alanında tr.technopat.intent.action.showtime satırı giriyoruz.
Aynı yerde Category oluşturuyoruz ve name alanında android.intent.category.DEFAULT satırı giriyoruz. ActivityDate etkileşim için aynı adımları gerçekleşiyoruz. ActivityTime etkileşim için time.xml layout’u oluşturuyoruz:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tvTime" android:text="TextView" android:layout_gravity="center_horizontal" android:layout_marginTop="20dp" android:textSize="30sp"> </TextView> </LinearLayout>
Date.xml layout’u oluşturmak için time.xml layout’u kullanabiliriz. ActivityTime.java’yı oluşturuyoruz:
import java.sql.Date; import java.text.SimpleDateFormat; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ActivityTime extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.time); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); String time = sdf.format(new Date(System.currentTimeMillis())); TextView tvTime = (TextView) findViewById(R.id.tvTime); tvTime.setText(time); } }
ActivityDate.java’yı oluşturuyoruz:
import java.sql.Date; import java.text.SimpleDateFormat; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class ActivityDate extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.date); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); String date = sdf.format(new Date(System.currentTimeMillis())); TextView tvDate = (TextView) findViewById(R.id.tvDate); tvDate.setText(date); } }
Yukarıdaki kodda şimdiki saati hesaplıyoruz ve textView kullanarak gösteriyoruz. Kaydedelim ve çalıştıralım:
Show time butonuna basıyoruz:
Saati görüyoruz. İntent tr.technopat.intent.action.showtime faaliyeti kullanarak etkileşimi buldu ve çalıştırdı. Bu etkileşimde (Activity) Intent Filtre’de faaliyet (action) aynıdır (tr.technopat.intent.action.showtime). Geri dönelim (Back ) ve Show date butonuna basalım.
Ders Sonu Notları:
Bu derste Implicit Intent (Gizli niyet) nasıl çalıştığını uygulamayı kullanarak gördük. Sonraki derste aynı uygulamayı geliştirerek Intent Filter’in ve action’un özellikleri araştıracağız.