İşletim sistemi tarafından yönetilen isteklerdir
- Hangi uygulamanın çalıştırılacağına işletim sistemi karar verir
- Diğer uygulamalara istekte bulunmayı sağlar
- ✅ App Chooser adı verilen yapı ile kullanıcıya seçim hakkı tanınır
Intent
oluşturmadan önce isteği karşılayabilecekActivity
var mı kontrol edilmelidir.- İsteklerini sağlayacak
Activity
olmazsa uygulama kapanır
// Implicit intent oluşturma
Intent sendIntent= new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
sendIntent.setType("text/plain");
// Intent başlığını ayarlama
String title = getResources().getString(R.string.chooser_title);
// App Chooser oluşturma
Intent chooser = Intent.createChooser(sendIntent, title);
// İsteği sağlayacak Activity var mı kontrolü
if (sendIntent.resolveActivity(getPackageManager()) != null) {
startActivity(chooser);
}
AndroidManifest.xml
dosyasındaintent-filter
ile tanımlanan uygulamalardan biri seçilirintent-filter
0 veya daha fazlaaction
,category
veyadata
içeririntent-filter
içermeyenActivity
'ler sadece explicit intent ile çağrılabilir- Birden fazla
intent-filter
veya birintent-filter
için birden fazlaaction
,category
veyadata
tanımlanabilir
<intent-filter>
<!-- Açılış Activity'si oluduğunu belirtlir -->
<action android:name="android.intent.action.MAIN" />
<!-- Launcher ekranında (telefon ana ekranında) gözükmesini sağlar -->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
{% tabs %} {% tab title="Actions" %}
- Action yapısı Intent üzerinde
ACTION_
ön eki ile kullanılır
<intent-filter>
<!-- Intent sendIntent = new Intent(Intent.ACTION_SEND); -->
<action android:name="android.intent.action.EDIT" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
{% endtab %}
{% tab title="Categories" %}
- Category yapısı Intent üzerinde
CATEGORY_
ön eki ile kullanılır - Tüm implicit intent objelerine varsayılan olarak
android.intent.category.DEFAULT
atanır
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
{% endtab %}
{% tab title="Data" %} Alttaki yapıları vardır
- URI Scheme
- URI Host
- URI Path
- Mime type
<intent-filter>
<data android:mimeType="video/mpeg" android:scheme="http" />
<data android:mimeType="audio/mpeg" android:scheme="http" />
</intent-filter>
{% endtab %} {% endtabs %}
- Sosyal ağ uygulamalarında veri paylaşmak için kullanılan yöntemdir
- Implicit intent yerine, Android sunduğu bu yapı daha faydalıdır
ShareCompat.IntentBuilder
.from(this) // information about the calling activity
.setType(mimeType) // mime type for the data
.setChooserTitle("Share this text with: ") //title for the app chooser
.setText(txt) // intent data
.startChooser(); // send the intent
- Android'in çalışma yapısı gereği,
Activity
'ler eski açık olanı kullanmak yerine kendileri yeniActivity
oluştururlar (Şekil 1) - Implicit intent ile açılan
Activity
'ler de, asıl çalışanActivity
'den bağımsız olarak açılır (Şekil 2)
{% hint style="info" %} Bu yapı Activity Launch Modes ile değiştirilebilmektedir. {% endhint %}
{% embed url="https://developer.android.com/training/sharing/send" %}