একটি উইজেট হোস্ট তৈরি করুন

বেশিরভাগ অ্যান্ড্রয়েড-চালিত ডিভাইসে উপলব্ধ অ্যান্ড্রয়েড হোম স্ক্রিন ব্যবহারকারীকে কন্টেন্টে দ্রুত অ্যাক্সেসের জন্য অ্যাপ উইজেট (অথবা উইজেট ) এম্বেড করতে দেয়। আপনি যদি হোম স্ক্রিন প্রতিস্থাপন বা অনুরূপ কোনও অ্যাপ তৈরি করেন, তাহলে আপনি AppWidgetHost বাস্তবায়নের মাধ্যমে ব্যবহারকারীকে উইজেট এম্বেড করতে দিতে পারেন। এটি এমন কিছু নয় যা বেশিরভাগ অ্যাপকে করতে হয়, তবে আপনি যদি নিজের হোস্ট তৈরি করেন, তাহলে হোস্ট যে চুক্তিবদ্ধ বাধ্যবাধকতাগুলিতে পরোক্ষভাবে সম্মত হয় তা বোঝা গুরুত্বপূর্ণ।

এই পৃষ্ঠাটি একটি কাস্টম AppWidgetHost বাস্তবায়নের সাথে জড়িত দায়িত্বগুলির উপর আলোকপাত করে। একটি AppWidgetHost কীভাবে বাস্তবায়ন করতে হয় তার একটি নির্দিষ্ট উদাহরণের জন্য, Android হোম স্ক্রিন LauncherAppWidgetHost এর সোর্স কোডটি দেখুন।

একটি কাস্টম AppWidgetHost বাস্তবায়নের সাথে জড়িত মূল ক্লাস এবং ধারণাগুলির একটি সারসংক্ষেপ এখানে দেওয়া হল:

  • অ্যাপ উইজেট হোস্ট : AppWidgetHost তাদের UI-তে উইজেট এম্বেড করে এমন অ্যাপগুলির জন্য অ্যাপউইজেট পরিষেবার সাথে ইন্টারঅ্যাকশন প্রদান করে। একটি AppWidgetHost এমন একটি আইডি থাকতে হবে যা হোস্টের নিজস্ব প্যাকেজের মধ্যে অনন্য। এই আইডি হোস্টের সমস্ত ব্যবহারে টিকে থাকে। আইডিটি সাধারণত একটি হার্ডকোডেড মান যা আপনি আপনার অ্যাপে বরাদ্দ করেন।

  • অ্যাপ উইজেট আইডি : বাইন্ডিংয়ের সময় প্রতিটি উইজেট ইনস্ট্যান্সকে একটি অনন্য আইডি বরাদ্দ করা হয়। bindAppWidgetIdIfAllowed() এবং আরও বিস্তারিত জানার জন্য, পরবর্তী বাইন্ডিং উইজেট বিভাগটি দেখুন। হোস্ট allocateAppWidgetId() ব্যবহার করে অনন্য আইডিটি পায়। এই আইডিটি হোস্ট থেকে মুছে ফেলা না হওয়া পর্যন্ত উইজেটের জীবনকাল জুড়ে থাকে। যেকোনো হোস্ট-নির্দিষ্ট অবস্থা - যেমন উইজেটের আকার এবং অবস্থান - হোস্টিং প্যাকেজ দ্বারা টিকে থাকতে হবে এবং অ্যাপ উইজেট আইডির সাথে যুক্ত থাকতে হবে।

  • অ্যাপ উইজেট হোস্ট ভিউ : AppWidgetHostView কে এমন একটি ফ্রেম হিসেবে ভাবুন যেখানে উইজেটটি যখনই প্রদর্শিত হবে তখনই মোড়ানো থাকবে। হোস্ট দ্বারা প্রতিবার উইজেটটি ফুলে উঠলে একটি উইজেট একটি AppWidgetHostView এর সাথে যুক্ত থাকে।

    • ডিফল্টরূপে, সিস্টেমটি একটি AppWidgetHostView তৈরি করে, কিন্তু হোস্ট এটিকে প্রসারিত করে AppWidgetHostView এর নিজস্ব উপশ্রেণী তৈরি করতে পারে।
    • অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) থেকে শুরু করে, AppWidgetHostView গতিশীলভাবে ওভারলোডেড রঙ পরিচালনার জন্য setColorResources() এবং resetColorResources() পদ্ধতিগুলি প্রবর্তন করে। হোস্ট এই পদ্ধতিগুলিতে রঙ সরবরাহ করার জন্য দায়ী।
  • Options bundle : AppWidgetHost AppWidgetProvider কে উইজেটটি কীভাবে প্রদর্শিত হবে—উদাহরণস্বরূপ, আকারের পরিসরের তালিকা —এবং উইজেটটি লকস্ক্রিনে আছে নাকি হোম স্ক্রিনে—সম্পর্কিত তথ্য জানাতে options bundle ব্যবহার করে। এই তথ্য AppWidgetProvider উইজেটের বিষয়বস্তু এবং চেহারা কীভাবে এবং কোথায় প্রদর্শিত হবে তার উপর ভিত্তি করে তৈরি করতে দেয়। আপনি একটি উইজেটের বান্ডেল পরিবর্তন করতে updateAppWidgetOptions() এবং updateAppWidgetSize() ব্যবহার করতে পারেন। এই দুটি পদ্ধতিই onAppWidgetOptionsChanged() কলব্যাককে AppWidgetProvider এ ট্রিগার করে।

বাইন্ডিং উইজেট

যখন একজন ব্যবহারকারী একটি হোস্টে একটি উইজেট যোগ করেন, তখন বাইন্ডিং নামে একটি প্রক্রিয়া ঘটে। বাইন্ডিং বলতে একটি নির্দিষ্ট অ্যাপ উইজেট আইডিকে একটি নির্দিষ্ট হোস্ট এবং একটি নির্দিষ্ট AppWidgetProvider এর সাথে সংযুক্ত করাকে বোঝায়।

বাইন্ডিং API গুলি হোস্টের জন্য বাইন্ডিংয়ের জন্য একটি কাস্টম UI প্রদান করা সম্ভব করে। এই প্রক্রিয়াটি ব্যবহার করার জন্য, আপনার অ্যাপকে হোস্টের ম্যানিফেস্টে BIND_APPWIDGET অনুমতি ঘোষণা করতে হবে:

<uses-permission android:name="android.permission.BIND_APPWIDGET" />

কিন্তু এটা কেবল প্রথম ধাপ। রানটাইমের সময়, ব্যবহারকারীকে অবশ্যই আপনার অ্যাপটিকে হোস্টে একটি উইজেট যোগ করার অনুমতি দিতে হবে। আপনার অ্যাপের উইজেট যোগ করার অনুমতি আছে কিনা তা পরীক্ষা করতে, bindAppWidgetIdIfAllowed() পদ্ধতিটি ব্যবহার করুন। যদি bindAppWidgetIdIfAllowed() false প্রদান করে, তাহলে আপনার অ্যাপটিকে একটি ডায়ালগ প্রদর্শন করতে হবে যা ব্যবহারকারীকে অনুমতি দিতে বলবে: বর্তমান উইজেট সংযোজনের জন্য "allow", অথবা ভবিষ্যতের সমস্ত উইজেট সংযোজন কভার করার জন্য "always allow"।

এই স্নিপেটটি ডায়ালগটি কীভাবে প্রদর্শন করতে হয় তার একটি উদাহরণ দেয়:

কোটলিন

val intent = Intent(AppWidgetManager.ACTION_APPWIDGET_BIND).apply {
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName)
    // This is the options bundle described in the preceding section.
    putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options)
}
startActivityForResult(intent, REQUEST_BIND_APPWIDGET)

জাভা

Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, info.componentName);
// This is the options bundle described in the preceding section.
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS, options);
startActivityForResult(intent, REQUEST_BIND_APPWIDGET);

হোস্টকে অবশ্যই পরীক্ষা করতে হবে যে ব্যবহারকারী যে উইজেটটি যোগ করেন তার কনফিগারেশন প্রয়োজন কিনা। আরও তথ্যের জন্য, ব্যবহারকারীদের অ্যাপ উইজেট কনফিগার করতে সক্ষম করুন দেখুন।

আয়োজকের দায়িত্ব

আপনি AppWidgetProviderInfo মেটাডেটা ব্যবহার করে উইজেটের জন্য বেশ কয়েকটি কনফিগারেশন সেটিংস নির্দিষ্ট করতে পারেন। আপনি এই কনফিগারেশন বিকল্পগুলি পুনরুদ্ধার করতে পারেন, যা পরবর্তী বিভাগগুলিতে আরও বিস্তারিতভাবে আলোচনা করা হয়েছে, একটি উইজেট প্রদানকারীর সাথে সম্পর্কিত AppWidgetProviderInfo অবজেক্ট থেকে।

আপনি যে সংস্করণের অ্যান্ড্রয়েড টার্গেট করছেন না কেন, সমস্ত হোস্টের নিম্নলিখিত দায়িত্ব রয়েছে:

  • উইজেট যোগ করার সময়, পূর্বে বর্ণিত উইজেট আইডি বরাদ্দ করুন। হোস্ট থেকে যখন একটি উইজেট সরানো হয়, তখন উইজেট আইডিটি ডিলোকেট করতে deleteAppWidgetId() কল করুন।

  • একটি উইজেট যোগ করার সময়, কনফিগারেশন অ্যাক্টিভিটি চালু করা প্রয়োজন কিনা তা পরীক্ষা করে দেখুন। সাধারণত, হোস্টকে উইজেটের কনফিগারেশন অ্যাক্টিভিটি চালু করতে হয় যদি এটি বিদ্যমান থাকে এবং configuration_optional এবং reconfigurable ফ্ল্যাগ উভয় নির্দিষ্ট করে ঐচ্ছিক হিসাবে চিহ্নিত না হয়। বিস্তারিত জানার জন্য কনফিগারেশন অ্যাক্টিভিটি থেকে উইজেট আপডেট করুন দেখুন। অনেক উইজেট প্রদর্শিত হওয়ার আগে এটি একটি প্রয়োজনীয় পদক্ষেপ।

  • উইজেটগুলি AppWidgetProviderInfo মেটাডেটাতে একটি ডিফল্ট প্রস্থ এবং উচ্চতা নির্দিষ্ট করে। এই মানগুলি কোষগুলিতে সংজ্ঞায়িত করা হয়—যদি targetCellWidth এবং targetCellHeight নির্দিষ্ট করা থাকে—অথবা dps যদি শুধুমাত্র minWidth এবং minHeight নির্দিষ্ট করা থাকে। উইজেট সাইজিং অ্যাট্রিবিউটগুলি দেখুন।

    নিশ্চিত করুন যে উইজেটটি কমপক্ষে এতগুলি ডিপিএস দিয়ে সাজানো আছে। উদাহরণস্বরূপ, অনেক হোস্ট একটি গ্রিডে আইকন এবং উইজেটগুলিকে সারিবদ্ধ করে। এই পরিস্থিতিতে, ডিফল্টরূপে হোস্ট ন্যূনতম সংখ্যক কোষ ব্যবহার করে একটি উইজেট যুক্ত করে যা minWidth এবং minHeight সীমাবদ্ধতা পূরণ করে।

পূর্ববর্তী বিভাগে তালিকাভুক্ত প্রয়োজনীয়তাগুলি ছাড়াও, নির্দিষ্ট প্ল্যাটফর্ম সংস্করণগুলি এমন বৈশিষ্ট্যগুলি প্রবর্তন করে যা হোস্টের উপর নতুন দায়িত্ব অর্পণ করে।

লক্ষ্যযুক্ত অ্যান্ড্রয়েড সংস্করণের উপর ভিত্তি করে আপনার পদ্ধতি নির্ধারণ করুন

অ্যান্ড্রয়েড ১২

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) একটি অতিরিক্ত List<SizeF> বান্ডেল করে যাতে dps-এ সম্ভাব্য আকারের তালিকা থাকে যা একটি উইজেট ইনস্ট্যান্স অপশন বান্ডেলে নিতে পারে। প্রদত্ত আকারের সংখ্যা হোস্ট বাস্তবায়নের উপর নির্ভর করে। হোস্ট সাধারণত ফোনের জন্য দুটি আকার প্রদান করে - পোর্ট্রেট এবং ল্যান্ডস্কেপ - এবং ফোল্ডেবলের জন্য চারটি আকার।

একটি AppWidgetProvider RemoteViews কে কতগুলি বিভিন্ন RemoteViews প্রদান করতে পারে তার সীমা MAX_INIT_VIEW_COUNT (16)। যেহেতু AppWidgetProvider অবজেক্টগুলি List<SizeF> এর প্রতিটি আকারের সাথে একটি RemoteViews অবজেক্ট ম্যাপ করে, তাই MAX_INIT_VIEW_COUNT এর বেশি আকার প্রদান করবেন না।

অ্যান্ড্রয়েড ১২ dps-এ maxResizeWidth এবং maxResizeHeight অ্যাট্রিবিউটও চালু করে। আমরা সুপারিশ করি যে একটি উইজেট যাতে এই অ্যাট্রিবিউটগুলির মধ্যে অন্তত একটি ব্যবহার করা হয় তা অ্যাট্রিবিউট দ্বারা নির্দিষ্ট আকারের চেয়ে বেশি না হয়।

অতিরিক্ত সম্পদ

  • Glance রেফারেন্স ডকুমেন্টেশন দেখুন।