शुरू करना

इस पेज में, एनवायरमेंट को सेट अप करने और अपनी वेबसाइट को बेहतर बनाने का तरीका बताया गया है आपके ऐप्लिकेशन में स्लाइस.

ध्यान दें: Android Studio 3.2 या इसके बाद वाले वर्शन में, अतिरिक्त सुविधाएं शामिल हैं टूल और फ़ंक्शन जो स्लाइस डेवलपमेंट में आपकी मदद कर सकते हैं:

  • AndroidX का रीफ़ैक्टरिंग टूल: अगर आप किसी ऐसे प्रोजेक्ट में काम कर रहे हैं जो AndroidX लाइब्रेरी का इस्तेमाल करता है.
  • स्लाइस लिंट जांच: इमारत बनाते समय सामान्य एंटी-प्रैक्टिस को पकड़ता है स्लाइस
  • SliceProvider टेंप्लेट: बॉयलरप्लेट को तब हैंडल करता है, जब SliceProvider बनाना

स्लाइस व्यूअर को डाउनलोड और इंस्टॉल करें

नया सैंपल डाउनलोड करें Slice Viewer APK की रिलीज़ जिसकी मदद से आप अपनी स्लाइस का इस्तेमाल करके, SliceView एपीआई.

अगर ADB को आपके एनवायरमेंट में ठीक से सेट अप नहीं किया गया है, तो ज़्यादा जानकारी के लिए, ADB गाइड.

अपने डिवाइस पर स्लाइस व्यूअर इंस्टॉल करने के लिए, वही डायरेक्ट्री, जो डाउनलोड की गई slice-viewer.apk की है:

adb install -r -t slice-viewer.apk

स्लाइस व्यूअर चलाएं

Slice Viewer को अपने Android Studio प्रोजेक्ट से या यहां से लॉन्च किया जा सकता है कमांड लाइन:

अपने Android Studio प्रोजेक्ट से Slice Viewer लॉन्च करें

  1. अपने प्रोजेक्ट में, Run > कॉन्फ़िगरेशन में बदलाव करें...
  2. सबसे ऊपर बाएं कोने में, हरे रंग के प्लस के निशान पर क्लिक करें
  3. Android ऐप्लिकेशन चुनें

  4. नाम वाले फ़ील्ड में स्लाइस डालें

  5. मॉड्यूल ड्रॉपडाउन में अपना ऐप्लिकेशन मॉड्यूल चुनें

  6. लॉन्च के विकल्प में जाकर, लॉन्च ड्रॉपडाउन से यूआरएल चुनें

  7. यूआरएल फ़ील्ड में slice-<your slice URI> डालें

    उदाहरण: slice-content://com.example.your.sliceuri

  8. ठीक है पर क्लिक करें

ADB (कमांड लाइन) के ज़रिए स्लाइस व्यूअर टूल लॉन्च करें

Android Studio से अपना ऐप्लिकेशन चलाएं:

adb install -t -r <yourapp>.apk

नीचे दिए गए निर्देश की मदद से, अपना स्लाइस देखें:

adb shell am start -a android.intent.action.VIEW -d slice-<your slice URI>

स्लाइस व्यूअर दिख रहा है एक वाई-फ़ाई स्लाइस

अपने सभी स्लाइस एक ही जगह पर देखें

एक स्लाइस को लॉन्च करने के अलावा, आपको अपनी ऐसेट की लगातार एक सूची दिखेगी. स्लाइस.

  • यूआरआई के ज़रिए अपने स्लाइस को मैन्युअल तरीके से खोजने के लिए, खोज बार का इस्तेमाल करें (उदाहरण के लिए, content://com.example.android.app/hello). हर बार खोजने पर, स्लाइस सूची में जोड़ा गया.
  • जब आप स्लाइस यूआरआई के साथ स्लाइस व्यूअर टूल लॉन्च करते हैं, तो स्लाइस जोड़ दिया जाता है सूची में जोड़ें.
  • स्लाइस को सूची से हटाने के लिए, उसे स्वाइप करें.
  • सिर्फ़ स्लाइस वाला पेज देखने के लिए, स्लाइस के यूआरआई पर टैप करें. इसमें ये हैं स्लाइस यूआरआई के साथ स्लाइस व्यूअर लॉन्च करने जैसा ही है.

स्लाइस व्यूअर की सूची दिख रही है

स्लाइस को अलग-अलग मोड में देखें

स्लाइस दिखाने वाला ऐप्लिकेशन, SliceView#mode रनटाइम पर सेट अप किया जाता है, तो आपको यह पक्का करना चाहिए कि आपका स्लाइस हर मोड में उम्मीद के मुताबिक दिखे. मोड बदलने के लिए पेज के सबसे ऊपर दाईं ओर, मेन्यू आइकॉन चुनें.

सिंगल स्लाइस व्यूअर, जिसमें मोड को "छोटा" पर सेट किया गया है

अपना पहला स्लाइस बनाएं

स्लाइस बनाने के लिए, अपना Android Studio प्रोजेक्ट खोलें. इसके बाद, अपने src पर राइट क्लिक करें और नया... चुनें &gt; अन्य > स्लाइस देने वाला ऐप्लिकेशन. इससे एक क्लास बनती है इसे SliceProvider तक बढ़ाया जा सकता है, आपके AndroidManifest.xml पर सेवा देने वाली ज़रूरी कंपनी की एंट्री और आपकी जानकारी में बदलाव करता है ज़रूरी स्लाइस डिपेंडेंसी जोड़ने के लिए build.gradle.

AndroidManifest.xml में किए गए बदलाव को नीचे दिखाया गया है:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.android.app">
    ...
    <application>
        ...
        <provider android:name="MySliceProvider"
            android:authorities="com.example.android.app"
            android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.app.slice.category.SLICE" />
            </intent-filter>
        </provider>
        ...
    </application>

</manifest>

आपके build.gradle में ये डिपेंडेंसी जोड़ी जाती हैं:

Kotlin

dependencies {
// ...
    implementation "androidx.slice:slice-builders-ktx:(latest version)"
// ...
}

Java

dependencies {
// ...
    implementation "androidx.slice:slice-builders:(latest version)"
// ...
}

हर स्लाइस में एक यूआरआई होता है. जब कोई प्लैटफ़ॉर्म कोई स्लाइस दिखाना चाहता है, तो वह इस यूआरआई के साथ, आपके ऐप्लिकेशन को एक बाइंडिंग अनुरोध भेजता है. इसके बाद, आपका ऐप्लिकेशन इसे मैनेज करता है अनुरोध करता है और onBindSlice तरीका. इसके बाद, ज़रूरत पड़ने पर प्लैटफ़ॉर्म पर स्लाइस दिखाया जा सकता है.

नीचे एक onBindSlice तरीके का उदाहरण दिया गया है, जो /hello यूआरआई की जांच करता है पाथ और नमस्ते दुनिया का एक स्लाइस दिखाता है:

Kotlin

override fun onBindSlice(sliceUri: Uri): Slice? {
    val activityAction = createActivityAction()
    return if (sliceUri.path == "/hello") {
        list(context, sliceUri, ListBuilder.INFINITY) {
            row {
                primaryAction = activityAction
                title = "Hello World."
            }
        }
    } else {
        list(context, sliceUri, ListBuilder.INFINITY) {
            row {
                primaryAction = activityAction
                title = "URI not recognized."
            }
        }
    }
}

Java

@Override
public Slice onBindSlice(Uri sliceUri) {
    if (getContext() == null) {
        return null;
    }
    SliceAction activityAction = createActivityAction();
    ListBuilder listBuilder = new ListBuilder(getContext(), sliceUri, ListBuilder.INFINITY);
    // Create parent ListBuilder.
    if ("/hello".equals(sliceUri.getPath())) {
        listBuilder.addRow(new ListBuilder.RowBuilder()
                .setTitle("Hello World")
                .setPrimaryAction(activityAction)
        );
    } else {
        listBuilder.addRow(new ListBuilder.RowBuilder()
                .setTitle("URI not recognized")
                .setPrimaryAction(activityAction)
        );
    }
    return listBuilder.build();
}

आपने 'स्लाइस व्यूअर' सेक्शन में जो स्लाइस रन कॉन्फ़िगरेशन बनाया है, उसका इस्तेमाल करें ऊपर, अपने स्लाइस यूआरआई में पास करना (उदाहरण के लिए, slice-content://com.android.example.slicesample/hello) आपका Hey World इसे स्लाइस व्यूअर में देखने के लिए स्लाइस करें.

इंटरैक्टिव स्लाइस

सूचनाओं की तरह ही, आप अपने स्लाइस में PendingIntent ऐसे ऑब्जेक्ट जो उपयोगकर्ता के इंटरैक्शन पर ट्रिगर होता है. नीचे दिए गए उदाहरण से Activity जो इन पैरामीटर को पा सकता है और मैनेज कर सकता है इंटेंट:

Kotlin

fun createSlice(sliceUri: Uri): Slice {
    val activityAction = createActivityAction()
    return list(context, sliceUri, INFINITY) {
        row {
            title = "Perform action in app"
            primaryAction = activityAction
        }
    }
}

fun createActivityAction(): SliceAction {
    val intent = Intent(context, MainActivity::class.java)
    return SliceAction.create(
        PendingIntent.getActivity(context, 0, Intent(context, MainActivity::class.java), 0),
        IconCompat.createWithResource(context, R.drawable.ic_home),
        ListBuilder.ICON_IMAGE,
        "Enter app"
    )
}

Java

public Slice createSlice(Uri sliceUri) {
    if (getContext() == null) {
        return null;
    }
    SliceAction activityAction = createActivityAction();
    return new ListBuilder(getContext(), sliceUri, ListBuilder.INFINITY)
            .addRow(new ListBuilder.RowBuilder()
                    .setTitle("Perform action in app.")
                    .setPrimaryAction(activityAction)
            ).build();
}

public SliceAction createActivityAction() {
    if (getContext() == null) {
        return null;
    }
    return SliceAction.create(
            PendingIntent.getActivity(
                    getContext(),
                    0,
                    new Intent(getContext(), MainActivity.class),
                    0
            ),
            IconCompat.createWithResource(getContext(), R.drawable.ic_home),
            ListBuilder.ICON_IMAGE,
            "Enter app"
    );
}

स्लाइस, अन्य इनपुट टाइप के साथ भी काम करते हैं. जैसे, टॉगल ऐप्लिकेशन पर भेजे गए इंटेंट के लिए.

Kotlin

fun createBrightnessSlice(sliceUri: Uri): Slice {
    val toggleAction =
        SliceAction.createToggle(
            createToggleIntent(),
            "Toggle adaptive brightness",
            true
        )
    return list(context, sliceUri, ListBuilder.INFINITY) {
        row {
            title = "Adaptive brightness"
            subtitle = "Optimizes brightness for available light"
            primaryAction = toggleAction
        }
        inputRange {
            inputAction = (brightnessPendingIntent)
            max = 100
            value = 45
        }
    }
}

fun createToggleIntent(): PendingIntent {
    val intent = Intent(context, MyBroadcastReceiver::class.java)
    return PendingIntent.getBroadcast(context, 0, intent, 0)
}

Java

public Slice createBrightnessSlice(Uri sliceUri) {
    if (getContext() == null) {
        return null;
    }
    SliceAction toggleAction = SliceAction.createToggle(
            createToggleIntent(),
            "Toggle adaptive brightness",
            true
    );
    ListBuilder listBuilder = new ListBuilder(getContext(), sliceUri, ListBuilder.INFINITY)
            .addRow(new ListBuilder.RowBuilder()
                    .setTitle("Adaptive brightness")
                    .setSubtitle("Optimizes brightness for available light.")
                    .setPrimaryAction(toggleAction)
            ).addInputRange(new ListBuilder.InputRangeBuilder()
                    .setInputAction(brightnessPendingIntent)
                    .setMax(100)
                    .setValue(45)
            );
    return listBuilder.build();
}

public PendingIntent createToggleIntent() {
    Intent intent = new Intent(getContext(), MyBroadcastReceiver.class);
    return PendingIntent.getBroadcast(getContext(), 0, intent, 0);
}

इसके बाद, पाने वाला यह देख सकता है कि उसे ये चीज़ें कैसे मिलती हैं:

Kotlin

class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.hasExtra(Slice.EXTRA_TOGGLE_STATE)) {
            Toast.makeText(context, "Toggled:  " + intent.getBooleanExtra(
                    Slice.EXTRA_TOGGLE_STATE, false),
                    Toast.LENGTH_LONG).show()
        }
    }

    companion object {
        const val EXTRA_MESSAGE = "message"
    }
}

Java

public class MyBroadcastReceiver extends BroadcastReceiver {

    public static String EXTRA_MESSAGE = "message";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.hasExtra(EXTRA_TOGGLE_STATE)) {
            Toast.makeText(context, "Toggled:  " + intent.getBooleanExtra(
                    EXTRA_TOGGLE_STATE, false),
                    Toast.LENGTH_LONG).show();
        }
    }
}

डाइनैमिक स्लाइस

स्लाइस में लगातार अपडेट होने वाली जानकारी भी हो सकती है. नीचे दिए गए उदाहरण में, 'स्लाइस' में इसमें कॉन्टेंट में मिले ब्रॉडकास्ट की संख्या शामिल होती है:

Kotlin

fun createDynamicSlice(sliceUri: Uri): Slice {
    return when (sliceUri.path) {
        "/count" -> {
            val toastAndIncrementAction = SliceAction.create(
                createToastAndIncrementIntent("Item clicked."),
                actionIcon,
                ListBuilder.ICON_IMAGE,
                "Increment."
            )
            list(context, sliceUri, ListBuilder.INFINITY) {
                row {
                    primaryAction = toastAndIncrementAction
                    title = "Count: ${MyBroadcastReceiver.receivedCount}"
                    subtitle = "Click me"
                }
            }
        }

        else -> {
            list(context, sliceUri, ListBuilder.INFINITY) {
                row {
                    primaryAction = createActivityAction()
                    title = "URI not found."
                }
            }
        }
    }
}

Java

public Slice createDynamicSlice(Uri sliceUri) {
    if (getContext() == null || sliceUri.getPath() == null) {
        return null;
    }
    ListBuilder listBuilder = new ListBuilder(getContext(), sliceUri, ListBuilder.INFINITY);
    switch (sliceUri.getPath()) {
        case "/count":
            SliceAction toastAndIncrementAction = SliceAction.create(
                    createToastAndIncrementIntent("Item clicked."),
                    actionIcon,
                    ListBuilder.ICON_IMAGE,
                    "Increment."
            );
            listBuilder.addRow(
                    new ListBuilder.RowBuilder()
                            .setPrimaryAction(toastAndIncrementAction)
                            .setTitle("Count: " + MyBroadcastReceiver.sReceivedCount)
                            .setSubtitle("Click me")
            );
            break;
        default:
            listBuilder.addRow(
                    new ListBuilder.RowBuilder()
                            .setPrimaryAction(createActivityAction())
                            .setTitle("URI not found.")
            );
            break;
    }
    return listBuilder.build();
}

public PendingIntent createToastAndIncrementIntent(String s) {
    Intent intent = new Intent(getContext(), MyBroadcastReceiver.class)
            .putExtra(MyBroadcastReceiver.EXTRA_MESSAGE, s);
    return PendingIntent.getBroadcast(getContext(), 0, intent, 0);
}

इस उदाहरण में, प्रॉडक्ट की संख्या दिख रही है, लेकिन यह अपने-आप अपडेट नहीं होती. आप सिस्टम को बदलाव होने की सूचना देने के लिए, अपने ब्रॉडकास्ट रिसीवर में बदलाव करें इसका इस्तेमाल करके ContentResolver#notifyChange.

Kotlin

class MyBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if (intent.hasExtra(Slice.EXTRA_TOGGLE_STATE)) {
            Toast.makeText(
                context, "Toggled:  " + intent.getBooleanExtra(
                    Slice.EXTRA_TOGGLE_STATE, false
                ),
                Toast.LENGTH_LONG
            ).show()
            receivedCount++;
            context.contentResolver.notifyChange(sliceUri, null)
        }
    }

    companion object {
        var receivedCount = 0
        val sliceUri = Uri.parse("content://com.android.example.slicesample/count")
        const val EXTRA_MESSAGE = "message"
    }
}

Java

public class MyBroadcastReceiver extends BroadcastReceiver {

    public static int sReceivedCount = 0;
    public static String EXTRA_MESSAGE = "message";

    private static Uri sliceUri = Uri.parse("content://com.android.example.slicesample/count");

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.hasExtra(EXTRA_TOGGLE_STATE)) {
            Toast.makeText(context, "Toggled:  " + intent.getBooleanExtra(
                    EXTRA_TOGGLE_STATE, false),
                    Toast.LENGTH_LONG).show();
            sReceivedCount++;
            context.getContentResolver().notifyChange(sliceUri, null);
        }
    }
}

टेंप्लेट

स्लाइस में कई तरह के टेंप्लेट इस्तेमाल किए जा सकते हैं. टेंप्लेट के विकल्पों और व्यवहार के बारे में जानने के लिए, टेंप्लेट देखें.