টাইলস মধ্যে পর্যায়ক্রমিক আপডেট দেখান

এমন টাইলস তৈরি করুন যার বিষয়বস্তু সময়ের সাথে সাথে পরিবর্তিত হয়।

সময়সীমা মেনে কাজ করুন

একটি টাইমলাইন এক বা একাধিক TimelineEntry ইনস্ট্যান্স নিয়ে গঠিত, যার প্রতিটিতে একটি লেআউট থাকে যা একটি নির্দিষ্ট সময় ব্যবধানে প্রদর্শিত হয়। সমস্ত টাইলের একটি টাইমলাইন থাকা প্রয়োজন।

টাইল টাইমলাইনের ডায়াগ্রাম

একক-প্রবেশ টাইলস

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

একটিমাত্র TimelineEntry সহ একটি টাইলের নিম্নলিখিত উদাহরণটি দেখুন:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> {
    val tile =
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            // We add a single timeline entry when our layout is fixed, and
            // we don't know in advance when its contents might change.
            .setTileTimeline(Timeline.fromLayoutElement(simpleLayout(this)))
            .build()
    return Futures.immediateFuture(tile)
}

সময়বদ্ধ টাইমলাইন এন্ট্রি

একটি TimelineEntry ঐচ্ছিকভাবে একটি বৈধতার সময়কাল নির্ধারণ করা যায়, যার ফলে অ্যাপটিকে নতুন কোনো টাইল পুশ করার প্রয়োজন ছাড়াই একটি টাইল একটি নির্দিষ্ট সময়ে তার লেআউট পরিবর্তন করতে পারে।

এর আদর্শ উদাহরণ হলো একটি এজেন্ডা টাইল, যার টাইমলাইনে আসন্ন ইভেন্টগুলোর একটি তালিকা থাকে। প্রতিটি আসন্ন ইভেন্টে একটি বৈধতার সময়কাল থাকে, যা নির্দেশ করে কখন সেটি দেখানো হবে।

টাইলস এপিআই ওভারল্যাপিং ভ্যালিডিটি পিরিয়ডের সুবিধা দেয়, যেখানে যে স্ক্রিনের মেয়াদ সবচেয়ে কম বাকি থাকে, সেটিই দেখানো হয়। একবারে কেবল একটি ইভেন্টই প্রদর্শিত হয়।

ডেভেলপাররা একটি ডিফল্ট ফলব্যাক এন্ট্রি প্রদান করতে পারেন। উদাহরণস্বরূপ, এজেন্ডা টাইলে অসীম মেয়াদের একটি টাইল থাকতে পারে, যা অন্য কোনো টাইমলাইন এন্ট্রি বৈধ না হলে ব্যবহৃত হয়, যেমনটি নিম্নলিখিত কোড নমুনায় দেখানো হয়েছে:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> {
    val timeline = Timeline.Builder()

    // Add fallback "no meetings" entry
    // Use the version of TimelineEntry that's in androidx.wear.protolayout.
    timeline.addTimelineEntry(
        TimelineBuilders.TimelineEntry.Builder().setLayout(getNoMeetingsLayout()).build()
    )

    // Retrieve a list of scheduled meetings
    val meetings = MeetingsRepo.getMeetings()
    // Add a timeline entry for each meeting
    meetings.forEach { meeting ->
        timeline.addTimelineEntry(
            TimelineBuilders.TimelineEntry.Builder()
                .setLayout(getMeetingLayout(meeting))
                .setValidity(
                    // The tile should disappear when the meeting begins
                    // Use the version of TimeInterval that's in
                    // androidx.wear.protolayout.
                    TimelineBuilders.TimeInterval.Builder()
                        .setEndMillis(meeting.dateTimeMillis)
                        .build()
                )
                .build()
        )
    }

    val tile =
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setTileTimeline(timeline.build())
            .build()
    return Futures.immediateFuture(tile)
}

একটি টাইল রিফ্রেশ করুন

একটি টাইলে প্রদর্শিত তথ্য কিছু সময় পরে মেয়াদোত্তীর্ণ হয়ে যেতে পারে। উদাহরণস্বরূপ, একটি আবহাওয়ার টাইল যা সারাদিন একই তাপমাত্রা দেখায়, তা সঠিক নয়।

মেয়াদোত্তীর্ণ ডেটা সামাল দিতে, একটি টাইল তৈরি করার সময় একটি ফ্রেশনেস ইন্টারভ্যাল সেট করুন, যা নির্দিষ্ট করে দেয় টাইলটি কতক্ষণ বৈধ থাকবে। ওয়েদার টাইলের উদাহরণে, আপনি প্রতি ঘণ্টায় এর বিষয়বস্তু আপডেট করতে পারেন, যেমনটি নিম্নলিখিত কোড স্যাম্পলে দেখানো হয়েছে:

override fun onTileRequest(
    requestParams: RequestBuilders.TileRequest
): ListenableFuture<Tile?> =
    Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setFreshnessIntervalMillis(60 * 60 * 1000) // 60 minutes
            .setTileTimeline(Timeline.fromLayoutElement(getWeatherLayout()))
            .build()
    )

আপনি যখন একটি ফ্রেশনেস ইন্টারভাল সেট করেন, তখন সেই ইন্টারভাল শেষ হওয়ার কিছুক্ষণ পরেই সিস্টেম onTileRequest() ফাংশনটি কল করে। আপনি যদি কোনো ফ্রেশনেস ইন্টারভাল সেট না করেন, তাহলে সিস্টেম onTileRequest() কল করে না।

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

fun eventDeletedCallback() {
     TileService.getUpdater(context)
             .requestUpdate(MyTileService::class.java)
}

একটি আপডেট ওয়ার্কফ্লো বেছে নিন

আপনার টাইল আপডেটগুলি কীভাবে কনফিগার করবেন তা নির্ধারণ করতে এই সর্বোত্তম পদ্ধতিগুলি ব্যবহার করুন:

  • আপডেটটি যদি অনুমানযোগ্য হয়—উদাহরণস্বরূপ, যদি এটি ব্যবহারকারীর ক্যালেন্ডারের পরবর্তী কোনো ইভেন্টের জন্য হয়—তাহলে একটি টাইমলাইন ব্যবহার করুন।
  • প্ল্যাটফর্ম ডেটা আনার সময় ডেটা বাইন্ডিং ব্যবহার করুন, যাতে সিস্টেম স্বয়ংক্রিয়ভাবে ডেটা আপডেট করে।
  • যদি আপডেটটি ডিভাইসেই অল্প সময়ের মধ্যে গণনা করা যায়—যেমন সানরাইজ টাইলে কোনো ছবির অবস্থান আপডেট করা—তাহলে onTileRequest() ব্যবহার করুন।

    এটি বিশেষভাবে উপযোগী যখন আপনাকে আগে থেকেই সমস্ত ছবি তৈরি করে রাখতে হয়। ভবিষ্যতে কোনো এক সময়ে যদি আপনার একটি নতুন ছবি তৈরি করার প্রয়োজন হয়, তাহলে setFreshnessIntervalMillis() কল করুন।

  • আপনি যদি বারবার আরও নিবিড় ব্যাকগ্রাউন্ড কাজ করেন, যেমন আবহাওয়ার তথ্যের জন্য পোলিং করা, তাহলে WorkManager ব্যবহার করুন এবং আপনার টাইলে আপডেটগুলি পুশ করুন।

  • যদি আপডেটটি কোনো বাহ্যিক ঘটনার প্রতিক্রিয়ায় হয়—যেমন আলো জ্বলে ওঠা, ইমেল পাওয়া, বা কোনো নোট আপডেট করা—তাহলে আপনার অ্যাপটিকে আবার সক্রিয় করতে একটি Firebase Cloud Messaging (FCM) বার্তা পাঠান, তারপর টাইলটিতে আপডেটগুলো পুশ করুন।

  • যদি টাইল ডেটা সিঙ্ক প্রক্রিয়াটি ব্যয়বহুল হতে পারে, তাহলে নিম্নলিখিতগুলি করুন:

    1. ডেটা সিঙ্ক করার সময় নির্ধারণ করুন।
    2. ১-২ সেকেন্ডের জন্য একটি টাইমার চালু করুন।
    3. সময় শেষ হওয়ার আগে যদি কোনো দূরবর্তী ডেটা উৎস থেকে আপডেট পান, তাহলে ডেটা সিঙ্ক থেকে আপডেট হওয়া মানটি দেখান। অন্যথায়, ক্যাশ করা স্থানীয় মানটি দেখান।
{% হুবহু %} {% endverbatim %} {% হুবহু %} {% endverbatim %}