
Slices, Google search app’inde ve umarฤฑz ki ileride de daha fazla yerde uygulamadan iรงerik sunan ui templateleridir. UI templateleridir diyoruz รงรผnkรผ belli formatda, belli templateler kullanฤฑlarak sunulabiliyor. Basitรงe widget’lara benzer de denilebilir. ลimdi App Action‘larฤฑn da developerlara aรงฤฑlmasฤฑyla beraber daha fazla senaryo saฤlanabilir. Slices Android 4.4’e kadar uyumlu. Bu da Android Studio’da uygulamayฤฑ create ederken gรถrebileceฤimiz gibi piyasadaki cihazlarฤฑn ortalama %95’i anlamฤฑna geliyor. Slices live-data, scroll edebilen iรงerik, inline actions, ve uygulamamฤฑza deep link saฤlamฤฑล oluyor.
Slices tasarlarken 3 nokta รถnemli.
- Interaktif olmalฤฑ. Slices iรงerisinde kullanฤฑcฤฑ hฤฑzlฤฑca bazฤฑ ลeyleri gerรงekleลtirebilmeli.
- Slices’ฤฑn amacฤฑna uygun olarak รถnemli, รถzet bilgiye eriลim saฤlamalฤฑ. Her ลey burada yer almamalฤฑ.
- Modular olmalฤฑ. Uygulama dฤฑลฤฑnda da tek baลฤฑna yaลayabilmeli. Tabi bu uygulama olmadan slices olabileceฤi anlamฤฑna da gelmiyor.
Slices geliลtirmek iรงin Android Studio‘nun en az 3.2 versiyonu olmasฤฑ gerekiyor.
Bir Slice yaratmak iรงin varolan Android Studio projemizde aลaฤฤฑdaki imajdaki gibi New –> Other –> SliceProvider ฤฑ seรงip SliceProvider‘dan extend eden bir class yaratmamฤฑz gerekmektedir.

Bunu yaptฤฑฤฤฑmฤฑzda gradle dosyasฤฑna aลaฤฤฑdaki dependency’lerin eklendiฤini ve AndroidManifest.xml dosyasฤฑnda aลaฤฤฑdaki gibi provider bloฤunun eklendiฤini gรถreceฤiz.
implementation 'androidx.annotation:annotation:1.1.0'
implementation 'androidx.slice:slice-builders:1.0.0'
<provider | |
android:name=".MySliceProvider" | |
android:authorities="com.boncuk.slicesdemo" | |
android:exported="true"> | |
<intent-filter> | |
<action android:name="android.intent.action.VIEW"/> | |
<category android:name="android.app.slice.category.SLICE"/> | |
<data | |
android:host="boncuk.com" | |
android:pathPrefix="/hello" | |
android:scheme="http"/> | |
</intent-filter> | |
</provider> |
Her bir slice bir URI’yle iliลkilidir. Slice herhangi bir yerden gรถrรผntรผlenmek istediฤinde bu URI’yla uygulamaya bir binding request gรถnderilir. Uygulamamฤฑz da bu URI istediฤini alฤฑr ve onBindSlice methodu aracฤฑlฤฑฤฤฑyla Slice’ฤฑ build eder. URI’yi karลฤฑlayan bir Slice olmasฤฑ durumunda da gรถrรผntรผlenir.
/** | |
* Construct the Slice and bind data if available. | |
*/ | |
override fun onBindSlice(sliceUri: Uri): Slice? { | |
// Note: you should switch your build.gradle dependency to | |
// slice-builders-ktx for a nicer interface in Kotlin. | |
val context = context ?: return null | |
val activityAction = createActivityAction() ?: return null | |
return if (sliceUri.path == "/hello") { | |
// Path recognized. Customize the Slice using the androidx.slice.builders API. | |
// Note: ANR and StrictMode are enforced here so don't do any heavy operations. | |
// Only bind data that is currently available in memory. | |
ListBuilder(context, sliceUri, ListBuilder.INFINITY) | |
.addRow( | |
ListBuilder.RowBuilder() | |
.setTitle("URI found.") | |
.setPrimaryAction(activityAction) | |
) | |
.build() | |
} else { | |
// Error: Path not found. | |
ListBuilder(context, sliceUri, ListBuilder.INFINITY) | |
.addRow( | |
ListBuilder.RowBuilder() | |
.setTitle("URI not found.") | |
.setPrimaryAction(activityAction) | |
) | |
.build() | |
} | |
} |
Slices notifications gibi interactive olabilir. Kullanฤฑcฤฑnฤฑn aksiyonuna baฤlฤฑ bir PendingIntent’i Slice’a iliลkilendirerek actionlarฤฑ tutabilir ve yรถnlendirebiliriz. onBind methodunun iรงerisinde bu sefer ilgili pathPrefix’de Slice yaratan methodu return etmemiz gerekecek. Slices kullanฤฑcan input almamฤฑzฤฑ saฤlayacak toggle da olabilirdi. Toggle’ฤฑn action’ฤฑn negatif ya da pozitif olduฤu bilgisini kullanarak da action’ฤฑ trigger edebilirdik. Ya da mesela broadcastreceiver’dan aldฤฑฤฤฑ dinamik content’i de gรถsterebilir. Tรผm slices template’leri iรงin link inlecelenebilir.
fun createSlice(sliceUri: Uri): Slice { | |
val activityAction = createActivityAction() | |
return list(context, sliceUri, INFINITY) { | |
row { | |
title = "Perform action in app" | |
primaryAction = activityAction | |
} | |
} | |
} | |
private fun createActivityAction(): SliceAction? { | |
return SliceAction.create( | |
PendingIntent.getActivity( | |
context, 0, Intent(context, MainActivity::class.java), 0 | |
), | |
IconCompat.createWithResource(context, R.drawable.ic_launcher_foreground), | |
ListBuilder.ICON_IMAGE, | |
"Open App" | |
) | |
} |
Slices’ฤฑ test edebilmek iรงin Slices Viewer APK‘ya ihtiyacฤฑmฤฑz var. Linkten gรผncel versiyonu indirilebilir.
adb install -r -t slice-viewer.apk
Slice’ฤฑ test edebilmek iรงin, edit configurations diyerek Android App konfigรผrasyonu ekleyerek aลaฤฤฑdaki gรถrseldeki gibi pathPrefix’imizi verebiliriz.

Slices konfigurasyonunu run ettiฤimizde ise slice’ฤฑmฤฑzฤฑ slice viewer’da gรถrebiliriz. Az รถnce eklediฤimiz slice template’den eklendiฤi iรงin ise aลaฤฤฑdaki gibi bir ekranla karลฤฑlacaฤฤฑz.

Github Repository:
https://github.com/ElifBon/SlicesDemo
Referans ve daha fazla detay iรงin:
https://developer.android.com/guide/slices/getting-started
https://codelabs.developers.google.com/codelabs/android-slices-basic/index.html?index=..%2F..io2019#0