4 Mart 2015 Çarşamba

Intent

Intent bir objedir. İçinde komponentler arasında taşınmak üzere bir mesaj bulundurur.
intentler activity, service ve broadcast receiver lar arasında mesaj iletimi sağlar.
Bir aktiviteyi ya da servisi başlatmayı, bir broadcast iletimi yapmayı intent ile sağlarız.
Intentler app içinde ya da dışında işlem başlatabilirler.
App içinde activityler arasında giden intentlere "explicit"; başka app leri çalıştıran intentlere "implicit" denir.
startActivity(myIntent) komutuyla başlatılırlar.

1. Explicit intentler:

- Başka bir activity başlatmak için :
Intent i = new Intent(this, AnActivity.class);
i.setData(Uri.parse(fileUrl)); //isteğe bağlı
startActivity(i);

2. Implicit intentler:
putExtra() metoduyla ilave data verebiliyoruz.
setType() ile MIME type belirtmek gerekir. Aksi halde istediğimizden başka app lar da trigger olur.
Örneğin ACTION_VIEW intenti ile resim görüntülemek istiyorsak "image/*" diyerek spesifik davrandığımızdan, başka data tiplerini görüntüleyebilen appleri trigger etmez.
Eğer yolladığımız intenti handle edebilecek bir app yoksa app crash edecektir.
Bu yüzden queryIntentActivities() metodundan dönen liste boş değilse, intenti kullanabiliriz demektir.
Şöyle ki:
PackageManager packageManager = getPackageManager();
List activities = packageManager.queryIntentActivities(intent,
       PackageManager.MATCH_DEFAULT_ONLY);
boolean isIntentSafe = activities.size() > 0;

Örneğin harita görüntülemeden önce haritayı gösterebilen bir app olduğunu kontrol eden ve sonra başlatan bir kod:
// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);

// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;

// Start an activity if it's safe
if (isIntentSafe) {
   startActivity(mapIntent);
}


Eğer intenti birden fazla app handle edebiliyorsa bir app chooser ile kullanıcıya her defasında seçtirebiliriz.
Şöyle ki:
Intent intent = new Intent(Intent.ACTION_SEND);
...

// Always use string resources for UI text.
// This says something like "Share this photo with"
String title = getResources().getString(R.string.chooser_title);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, title);

// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
   startActivity(chooser);
}




- Web sayfası görüntülemek için :
Uri webpage = Uri.parse("http://www.android.com");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);
startActivity(webIntent);

- Verilen numarayı aramak için :
Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);
startActivity(callIntent);

- Harita görüntülemek için :
// Map point based on address
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
// Or map point based on latitude/longitude
// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);
startActivity(mapIntent);

- E-mail göndermek için:
Intent emailIntent = new Intent(Intent.ACTION_SEND);
// The intent does not have a URI, so declare the "text/plain" MIME type
emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
// You can also attach multiple items by passing an ArrayList of Uris

- Calendar event başlatmak için:
Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
calendarIntent.putExtra(Events.TITLE, "Ninja class");
calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");

Hiç yorum yok:

Yorum Gönder