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)
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.parametre başlatılan Activity tarafından set edilen resultCode parametresidir.Bununla programcı metod içerisinde ilgili activitynin hangi durumda bitirilmiş olduğunu anlayabilmektedir.
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();
}
}