Intent Kavramı

  • Varolan aktiviteleri çağırmakta kullanılır.Önemli konulardan biridir.
    • BroadCast yayınlar
    • herhangi bir web adresinini aktif olan browserda göstermkete ,
    • mailto ile mail gönderme appini açmada
    • url açma işlemlerinde
  • Doğrudan nesneyi yaratmadan çalıstırmaya da yarar.
  • parametre geçirilecekse intentle yapılabilir.
  • çift yönlü veri iletişimi de sağlar.
    • startActivity
    • startActivityforResult

Intent ile Activity çalıştırmak

  • Intentin hangi activityi açacağını bilmek gereklidir. Açılacak olan activitynin sınıf türünü bilerek yapılabilir.
    • .class çağırılarak türü belirlenebilir.
    • IntentFilter ile String olarak kayıtlı komutlarla dial ekranının çağrılması vs...

Yeni activity eklemek için

BlankActivity denildiğinde otomatik aşagıdaki işlemler yapılır.

  • content second xml ve secondActivity.java yaratilir
  • manifest.xml'e de bilgilerini ekler.

MainActivity'de butona basılınca SecondActivity açılsın

Butonun onClick metoduna yazılır.

public void ButtonOpenClicked(View v) { Intent intent = new Intent(this , SecondActivity.class); this.startActivity(intent); }

Yeni Activity'ye Data Yollanması

Intent İçerisindeki Listeye Ekleyerek putExtra diyerek eklenir.

MainActivity.java

public void ButtonOpenClicked(View v) { Intent intent = new Intent(this , SecondActivity.class); intent.putExtra("TEXT_MESSAGE", m_editText.getMessage().toString); this.startActivity(intent); }

SecondActivity.java

private void init() { m_textView_showMessage = (TextView) this.findViewById(R.id.SECONDACTIVITY_TEXTVIEW_MESSAGESHOW); Intent intent = this.getIntent(); m_textView_showMessage.setText(intent.getStringExtra("EDITTEXT_MESSAGE")); }

  • Intent'in İçerisine Bundle Ekleyerek Data gönderme

    intent icerisine bundle ekleyerek putExtras(Bundle b);

    Anahtar Not:Bu yöntemde bundle icerisine eklenen her key'e ait datalar intent'in icerisindeki listeye eklenir.O yuzden bundle'a eklenen dataların keyleriyle intent'e eklenen dataların keyleri aynı olmamalı.

public void ButtonOpenClicked(View v) { Intent intent = new Intent(this , SecondActivity.class); Bundle b = new Bundle(); b.putString("TEXT_MESSAGE" , m_editText_message.getText().toString()); intent.putExtras(b); this.startActivity(intent); }

SecondActivity.java

private void init() { m_textView_showMessage = (TextView) this.findViewById(R.id.SECONDACTIVITY_TEXTVIEW_MESSAGESHOW); Intent intent = this.getIntent(); Bundle b =intent.getExtras();

          `m_textView_showMessage.setText(b.getString("TEXT_MESSAGE"));`

  `}`
  • Sınıfı intente ekleyerek (Serializable edilmiş sınıf için)

Serializable

  • Bir objenin seri olarak yazılması
  • Serializable arayüzünü implemente etmesi gereklidir.
  • Serializable markable interfacedir(metodu yoktur)
  • Intent içerisine serialzable object eklenebilir.
  • transient(anahtar kelime) edilen veri elemanları Serializable edilmez.transient String m_name;
  • intente ekleme :intent.putExtra(String id , Serizable s);
  • intentten alma getSerializableExtras("PERSON") diyerek person sınıfı get edilebilir.

MainActivity.javapublic void ButtonOpenClicked(View v) { Intent intent = new Intent(this , SecondActivity.class); intent.putExtra("PERSON" , new Person(1 , m_editText_message.getText().toString())); this.startActivity(intent); }

SecondActivity.javaprivate void init() { m_textView_showMessage = (TextView) this.findViewById(R.id.SECONDACTIVITY_TEXTVIEW_MESSAGESHOW); Intent intent = this.getIntent(); Person p = (Person) intent.getSerializableExtra("PERSON"); m_textView_showMessage.setText(p.toString()); }

Örnek Uygulama : SpreadSheet

SpreadSheet Uygulaması ne yapar?

  • mainActivity'de 2 editText ve 2 Button var
  • Aç Butonuna basılınca editTextlere girilen adette editText oluşturulacak activity2'de
  • Exit Butonuyla program kapatılacak.

Başlayan Activityden Başlatan Activitye Data Gönderme

startActivityForResult

Spreadsheet uygulamasında başlatan activityden başlayan activitye veri gönderilmektedir.
Başlatılan activity başlatan activitye bilgileri nasıl geri iletebilir?
Bunun için öncelikle başlatan activity startActivity metodu yerine StartActivityForResult metodunu çağırmalıdır.

public void startActivityForReult(Intent I , int requestCode)

Programcı başlatan activityde aşağıdaki yapıya sahip onActivityResult metodunu override ederek başlatılan activityden bilgi alabilir.

onActivityResult

protected void onActivityResult(int requestCode , ınt resultCode , Intent data)

  1. parametre başlatılan activitye ilişkin request kod parametresidir.Hangi request kod ile başlatılmış activityden dönülüyorsa bu parametreyle ayrıştırılır.
    Bu parametre onActivityResult içerisinde başlatılan activitiyleri ayrıştırmak amaçlı kullanılabilir.

  2. parametre başlatılan Activity tarafından set edilen resultCode parametresidir.Bununla programcı metod içerisinde ilgili activitynin hangi durumda bitirilmiş olduğunu anlayabilmektedir.

  3. parametre başlatılan Activity tarafından başlatılan activitye iletilen intent parametresidir.Tipik olarak başlatılan activity kapanmadan önce(destroy öncesi vb..) çeşitli bilgileri bu intent sınıfına gömerek başlatan activitye iletmektedir."


MainActivity.java

package org.csystem.linearlayoutsample;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity
{
    private static final int SECONDACTIVITY_REQUEST_CODE = 551;
    private static final int THIRDACTIVITY_REQUEST_CODE = 552;
    private TextView m_textView_message;

    private void init()
    {
        m_textView_message = (TextView) this.findViewById(R.id.MAINACTIVITY_TEXTVIEW_TEXTMESSAGE);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.init();
    }


    public void button2ClickProb (View v )
    {
        Intent intent = new Intent(this , SecondActivity.class);
        this.startActivityForResult(intent, SECONDACTIVITY_REQUEST_CODE);
    }


    public void button3ClickProb (View v )
    {
        Intent intent = new Intent(this , SecondActivity.class);
        this.startActivityForResult(intent , THIRDACTIVITY_REQUEST_CODE);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

        String msg = "";
        if(requestCode == SECONDACTIVITY_REQUEST_CODE)
        {
            if (resultCode == RESULT_OK)
                msg = "2.ACTIVITY OK BUTTON";
            else if (resultCode == RESULT_CANCELED)
                msg = "2.ACTIVITY CANCEL BUTTON";
        }
        else if(requestCode == THIRDACTIVITY_REQUEST_CODE)
        {
            if (resultCode == RESULT_OK)
                msg = "3.ACTIVITY OK BUTTON";
            else if (resultCode == RESULT_CANCELED)
                msg = "3.ACTIVITY CANCEL BUTTON";
        }
        m_textView_message.setText(msg);
    }
}

SecondActivity.java

package org.csystem.linearlayoutsample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;


public class SecondActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }


    public void onClickOkProc(View v)
    {
        this.setResult(RESULT_OK);
        this.finish();
    }


    public void onClickCancelProc(View v)
    {
        this.setResult(RESULT_CANCELED);
        this.finish();
    }
}

ThirdActivity.java

package org.csystem.linearlayoutsample;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

public class ThirdActivity extends AppCompatActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third);
    }


    public void onClickOkProc(View v)
    {
        this.setResult(RESULT_OK);
        this.finish();
    }


    public void onClickCancelProc(View v)
    {
        this.setResult(RESULT_CANCELED);
        this.finish();
    }
}