Android হোম স্ক্রিন ডেটা 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 উপস্থাপনা এক্সপোর্ট করতে,
contentResolver.callপদ্ধতিটিEXPORT_LAYOUT_XMLপ্যারামিটার হিসেবে ব্যবহার করুন পদ্ধতি। - এক্সপোর্ট করার সময়,
KEY_LAYOUTকী ব্যবহার করে ফেরত পাঠানো বান্ডেলে XML রিপ্রেজেন্টেশন অ্যাক্সেস করা যায়। - লঞ্চারের ওয়ার্কস্পেসের XML উপস্থাপনা ইমপোর্ট করতে,
IMPORT_LAYOUT_XML-কে মেথড প্যারামিটার হিসেবে ব্যবহার করেcontentResolver.callমেথড ব্যবহার করুন। - ইমপোর্ট করার সময়, XML উপস্থাপনা কল পদ্ধতির
argপ্যারামিটার হিসেবে প্রদান করা হয়। - এক্সপোর্ট ও ইমপোর্ট API কলের ক্ষেত্রে, বেছে নেওয়া অপারেশন সফলভাবে সম্পূর্ণ হলে
successরিটার্ন করে এবং অপারেশন বাধা পেলে বা সম্পূর্ণ না হলেfailureরিটার্ন করে। successবাfailureভ্যালুKEY_RESULTকী ব্যবহার করে ফেরত আসা বান্ডেল থেকে উদ্ধার করা যাবে।
যেমন, LaunchProvider ক্লাস ইনভোক করা দেখুন।
XML রিপ্রেজেন্টেশন
ইমপোর্ট ও এক্সপোর্ট করার সময় XML স্ট্রাকচারের জন্য নিম্নলিখিত গাইড ব্যবহার করুন।
Workspace অ্যাপ:
<?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>Hotseat অ্যাপ:
<?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 ক্লাসের জন্য নিম্নলিখিত আচরণগত অনুমান করা হয়।
- পদ্ধতিগুলি অ্যাটমিক এবং ব্লকিং।
- ইমপোর্ট করার সময় লঞ্চারে থাকা একই ধরনের ডেটা ওভাররাইট করা হয়, শুধুমাত্র নতুন ইমপোর্ট করা ডেটা রেখে দেওয়া হয়।
- ইমপোর্ট করা ডেটা সাথে সাথেই অ্যাক্সেস করা যায়; ইমপোর্ট করার সাথে সাথেই এক্সপোর্ট করলে নতুন ডেটা পাওয়া যায়।