অ্যান্ড্রয়েড হোম স্ক্রিন ডেটা LauncherProvider ক্লাস দ্বারা সরবরাহ করা হয়, যা ContentProvider প্রসারিত করে, যা XML ব্যবহার করে লঞ্চার ওয়ার্কস্পেস ডেটা আমদানি এবং রপ্তানি করার অনুমতি দেয়।
কন্টেন্ট প্রদানকারীর সাথে যোগাযোগ করুন
 LaunchProvider ক্লাসের সাথে ইন্টারঅ্যাক্ট করতে, যা ContentProvider প্রসারিত করে, call পদ্ধতিটি ব্যবহার করুন:
class LauncherProvider : ContentProvider {
    public Bundle call(String method, String arg, Bundle extras);
}
LaunchProvider ক্লাসটি চালু করুন
 আপনার অ্যাপ থেকে LauncherProvider ক্লাস চালু করতে, নিম্নলিখিতগুলি ব্যবহার করুন:
class YourClass {
    /**
     * This method imports Launcher workspace data as a XML string. Calling this method clears the old
     * data model within Launcher and replaces it with the imported data. It should be noted
     * that it doesn't need to clear all the Launcher's data, just what is similar to what is being imported.
     */
    fun importLauncherData(xmlRepresentation: String, ctx: Context): Boolean {
        val uri = try {
            getLauncherProviderUri(ctx)
        } catch (e: IllegalStateException) {
            Log.e(TAG, "Failed to get launcher provider URI", e)
            return false
        }
        val bundle = ctx.contentResolver.call(
            uri,
            LauncherProviderConstants.METHOD_IMPORT_LAYOUT_XML,
            xmlRepresentation,
            null,
        )
        return LauncherProviderConstants.SUCCESS
            .equals(bundle.getBoolean(LauncherProviderConstants.KEY_RESULT))
    }
    /**
     * Use this function to retrieve an XML string representation of the Launcher's Workspace.
     * This method doesn't return what the user sees on their home screen,
     * but rather what is in their data model at the moment it's called.
     */
    fun exportLauncherData(xmlRepresentation: String, ctx: Context): String {
        val uri = try {
            getLauncherProviderUri(ctx)
        } catch (e: IllegalStateException) {
            Log.e(TAG, "Failed to get launcher provider URI", e)
            return ""
        }
        val bundle = ctx.contentResolver.call(
            uri,
            LauncherProviderConstants.METHOD_EXPORT_LAYOUT_XML,
            null,
            null,
        )
        if (LauncherProviderConstants.FAILURE
            .equals(bundle.getBoolean(LauncherProviderConstants.KEY_RESULT))) {
            Log.e(TAG, "failed to export launcher data; review previous logs for the cause.")
        }
        return bundle.getString(LauncherProviderConstants.KEY_LAYOUT, "")
    }
    /**
     * Returns a Uri for interacting with Launcher's ContentProvider.
     *
     * Not all Launchers implement this api. This method throws an IllegalStateException
     * if the Launcher doesn't support it.
     */
    private fun getLauncherProviderUri(ctx: Context): Uri {
        val homeIntent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_HOME)
        val launcherPackage: String =
            ctx.packageManager
                .resolveActivity(homeIntent, PackageManager.MATCH_DEFAULT_ONLY)
                ?.activityInfo
                ?.packageName ?: throw IllegalStateException("No launcher package found")
        val authority = "${launcherPackage}.settings"
        ctx.packageManager.resolveContentProvider(authority, 0)
            ?: throw IllegalStateException(
                "Launcher package '$launcherPackage' does not support LauncherProvider",
            )
        return "content://$authority".toUri()
    }
}
পরামিতি
এই ধ্রুবকগুলি কল পদ্ধতিতে ব্যবহৃত হয়:
object LauncherProviderConstants {
    // Valid arg parameters for export and import operations
    private static final String METHOD_EXPORT_LAYOUT_XML = "EXPORT_LAYOUT_XML";
    private static final String METHOD_IMPORT_LAYOUT_XML = "IMPORT_LAYOUT_XML";
    // Bundle key and value set for determining if operation completed successfully or not
    private static final String KEY_RESULT = "KEY_RESULT";
    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";
    // Bundle key used to store exported XML-string representation of Launcher's workspace layout
    // and item metadata
    private static final String KEY_LAYOUT = "KEY_LAYOUT";
}
 নিম্নলিখিত সীমাবদ্ধতা সহ LauncherProvider ধ্রুবক ব্যবহার করুন:
-  লঞ্চারের কর্মক্ষেত্রের একটি XML উপস্থাপনা রপ্তানি করতে পদ্ধতি প্যারামিটার হিসেবে EXPORT_LAYOUT_XMLসহcontentResolver.callপদ্ধতি ব্যবহার করুন।
-  এক্সপোর্টের সময়, KEY_LAYOUTকী ব্যবহার করে ফেরত আসা বান্ডেলে XML উপস্থাপনা অ্যাক্সেসযোগ্য।
-  লঞ্চারের কর্মক্ষেত্রের একটি XML উপস্থাপনা আমদানি করতে পদ্ধতি প্যারামিটার হিসেবে IMPORT_LAYOUT_XMLসহcontentResolver.callপদ্ধতি ব্যবহার করুন।
-  আমদানির সময়, XML উপস্থাপনা কল পদ্ধতির argপ্যারামিটার হিসাবে প্রদান করা হয়।
-  রপ্তানি এবং আমদানি উভয় API কলের জন্য, নির্বাচিত অপারেশনের সফল সমাপ্তি successফিরে আসে, এবং বাধাপ্রাপ্ত বা ব্যর্থ অপারেশনগুলি ফিরে আসেfailure।
-  KEY_RESULTকী ব্যবহার করে ফিরে আসা বান্ডেলেsuccessবাfailureমান পুনরুদ্ধার করা যাবে।
উদাহরণস্বরূপ, LaunchProvider ক্লাসটি আমন্ত্রণ জানান ।
XML উপস্থাপনা
আমদানি এবং রপ্তানির সময় XML কাঠামোর জন্য নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করুন।
- ওয়ার্কস্পেস অ্যাপ: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace rows="4" columns="5"> <autoinstall container="desktop" x="1" y="1" screen="0" className="com.android.launcher3.tests.Activity2" packageName="com.google.android.apps.nexuslauncher" /> </workspace>
- হটসিট অ্যাপ: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace> <autoinstall container="hotseat" rank="0" className="com.android.launcher3.tests.Activity2" packageName="com.google.android.apps.nexuslauncher" /> </workspace>
- উইজেট: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace> <appwidget container="desktop" spanX="2" spanY="2" x="0" y="1" screen="0" className="PlaceholderWidget" packageName="com.test.pending" /> </workspace>
- ফোল্ডার: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace> <folder container="desktop" x="1" y="1" screen="1" titleText="CustomFolder"> <autoinstall className="com.android.launcher3.tests.Activity1" packageName="com.google.android.apps.nexuslauncher" /> <autoinstall className="com.android.launcher3.tests.Activity2" packageName="com.google.android.apps.nexuslauncher" /> <autoinstall className="com.android.launcher3.tests.Activity3" packageName="com.google.android.apps.nexuslauncher" /> </folder> </workspace>
- গভীর শর্টকাট: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace> <shortcut shortcutId="shortcut2" packageName="com.google.android.apps.nexuslauncher.tests" /> </workspace>
- অ্যাপ জোড়া: - <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <workspace> <apppair container="desktop" x="1" y="1" screen="1" titleText="CustomFolder"> <autoinstall className="com.android.launcher3.tests.Activity1" packageName="com.google.android.apps.nexuslauncher" /> <autoinstall className="com.android.launcher3.tests.Activity2" packageName="com.google.android.apps.nexuslauncher" /> </apppair> </workspace>
আচরণগত অনুমান
 LaunchProvider ক্লাসের জন্য আচরণগত অনুমানগুলি নিম্নরূপ।
- পদ্ধতিগুলি হল পারমাণবিক এবং ব্লকিং।
- লঞ্চারে থাকা অ্যানালগাস ডেটা আমদানির সময় ওভাররাইট করা হয়, যার ফলে কেবল নতুন আমদানি করা ডেটাই থাকে।
- আমদানি করা ডেটা তাৎক্ষণিকভাবে অ্যাক্সেসযোগ্য; আমদানির ঠিক পরে রপ্তানি করলে নতুন ডেটা ফেরত আসে।
