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

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

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

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

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

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

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

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

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

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

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

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

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

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

কোটলিন

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 মেটাডেটাতে একটি ডিফল্ট প্রস্থ এবং উচ্চতা নির্দিষ্ট করে। এই মানগুলি কক্ষগুলিতে সংজ্ঞায়িত করা হয় — Android 12 থেকে শুরু করে, যদি targetCellWidth এবং targetCellHeight নির্দিষ্ট করা থাকে—অথবা শুধুমাত্র minWidth এবং minHeight নির্দিষ্ট করা থাকলে dps। উইজেট সাইজিং বৈশিষ্ট্য দেখুন।

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

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

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

অ্যান্ড্রয়েড 12

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

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

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

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

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