Anasayfa Mobil Android Programlama Ders 28: Intent Filter’in Uygulanması

Android Programlama Ders 28: Intent Filter’in Uygulanması

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;
    }
  }
}

 packageExplorer

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.showtime
tr.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.

AddIntFilter

IntentFilter’de action oluşturuyoruz ve name (İsim) alanında tr.technopat.intent.action.showtime satırı giriyoruz.

action

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:

mainActivity

Show time butonuna basıyoruz:

time

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.

date

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.