আপনার অ্যাপের জন্য কাস্টম কুইক সেটিংস টাইল তৈরি করা

দ্রুত সেটিংস হল দ্রুত সেটিংস প্যানেলে দেখানো টাইলের মতো, যা অ্যাকশনকে উপস্থাপন করে এবং ব্যবহারকারীরা সেটিতে ট্যাপ করে পুনরাবৃত্তিমূলক টাস্ক দ্রুত সম্পূর্ণ করতে পারেন। আপনার অ্যাপ TileService ক্লাসের মাধ্যমে ব্যবহারকারীদের কাস্টম টাইল প্রদান করতে এবং টাইলের অবস্থা ট্র্যাক করতে Tile অবজেক্ট ব্যবহার করতে পারে। যেমন, আপনি এমন একটি টাইল তৈরি করতে পারেন যা ব্যবহারকারীদের আপনার অ্যাপের দেওয়া VPN চালু বা বন্ধ করতে দেয়।

VPN টাইল চালু ও বন্ধ করা সহ দ্রুত সেটিংস প্যানেল
ছবি ১. VPN টাইল চালু ও বন্ধ করা সহ দ্রুত সেটিংস প্যানেল।

কখন টাইল তৈরি করবেন সেই বিষয়ে সিদ্ধান্ত নিন

আমরা নির্দিষ্ট কার্যকারিতার জন্য টাইল তৈরি করার পরামর্শ দিই যা আপনি চান যে ব্যবহারকারীরা প্রায়ই অ্যাক্সেস করুক বা দ্রুত অ্যাক্সেস করুক (বা উভয়ই)। সবচেয়ে কার্যকর টাইল হল সেগুলি যেগুলি এই দুটি গুণাবলীই পূরণ করে এবং প্রায়শই করা হয় এমন অ্যাকশন দ্রুত অ্যাক্সেস করতে দেয়।

যেমন, আপনি ফিটনেস অ্যাপের জন্য এমন একটি টাইল তৈরি করতে পারেন যা ব্যবহারকারীদের দ্রুত ওয়ার্ক-আউট সেশন শুরু করতে দেবে। তবে, আমরা একই অ্যাপের জন্য এমন কোনও টাইল তৈরি করার পরামর্শ দিই না যা ব্যবহারকারীদের তাদের সম্পূর্ণ ওয়ার্কআউট ইতিহাস পর্যালোচনা করতে দেবে।

ফিটনেস অ্যাপ টাইল ব্যবহারের উদাহরণ
ছবি ২. ফিটনেস অ্যাপের জন্য সাজেস্ট করা ও সাজেস্ট না করা টাইল সংক্রান্ত উদাহরণ।

আপনার টাইল যাতে সহজে খুঁজে পাওয়া যায় এবং ব্যবহার করা যায় সেই জন্য আমরা কিছু বিষয় এড়িয়ে যেতে সাজেস্ট করি:

  • অ্যাপ লঞ্চ করার জন্য টাইলের ব্যবহার এড়িয়ে চলুন। এর পরিবর্তে অ্যাপ শর্টকাট বা স্ট্যান্ডার্ড লঞ্চার ব্যবহার করুন।

  • একবার ব্যবহারকারীর অ্যাকশনের জন্য টাইলের ব্যবহার এড়িয়ে চলুন। এর পরিবর্তে অ্যাপ শর্টকাট বা বিজ্ঞপ্তি ব্যবহার করুন।

  • অতিরিক্ত টাইল তৈরি করা এড়িয়ে চলুন। আমরা প্রতি অ্যাপে সর্বাধিক দুটি সাজেস্ট করি। এর পরিবর্তে অ্যাপ শর্টকাট ব্যবহার করুন।

  • এমন টাইল ব্যবহার করা এড়িয়ে চলুন যা তথ্য দেখায়, কিন্তু ব্যবহারকারীদের জন্য ইন্ট্যার‍্যাক্টিভ নয়। এর পরিবর্তে বিজ্ঞপ্তি বা উইজেট ব্যবহার করুন।

আপনার টাইল তৈরি করা

টাইল তৈরি করতে, প্রথমে আপনাকে উপযুক্ত টাইল আইকন তৈরি করতে হবে, তারপর আপনার অ্যাপের ম্যানিফেস্ট ফাইলে TileService তৈরি ও ঘোষণা করতে হবে।

দ্রুত সেটিংসের নমুনা থেকে কীভাবে কোনও টাইল তৈরি ও ম্যানেজ করতে হয় তার একটি উদাহরণ পাওয়া যায়।

আপনার কাস্টম আইকন তৈরি করা

আপনাকে একটি কাস্টম আইকন দিতে হবে, যা 'দ্রুত সেটিংস' প্যানেলে টাইলের উপর দেখানো হবে। (পরবর্তী বিভাগে বর্ণিত TileService ঘোষণা করার সময় আপনাকে এই আইকন যোগ করতে হবে, যা পরবর্তী বিভাগে বর্ণনা করা হয়েছে।) আইকনটি অবশ্যই সাদা রঙের হতে হবে এবং এর ব্যাকগ্রাউন্ড স্বচ্ছ হতে হবে। এর সাইজ ২৪ x ২৪dp হতে হবে এবং এটি VectorDrawable ফর্ম্যাটে হতে হবে।

ভেক্টর ড্রয়েবলের উদাহরণ
ছবি ৩. ভেক্টর ড্রয়েবলের উদাহরণ।

এমন একটি আইকন তৈরি করুন যা আপনার টাইলের উদ্দেশ্য সম্পর্কে ভিজ্যুয়ালি ইঙ্গিত দেয়। এর ফলে, আপনার টাইল ব্যবহারকারীর প্রয়োজনীয়তা পূরণ করতে পারবে কিনা তা তিনি বুঝতে পারেন। যেমন, আপনি ফিটনেস অ্যাপের জন্য একটি টাইলের স্টপওয়াচের আইকন তৈরি করতে পারেন, যা ব্যবহারকারীদের ওয়ার্কআউট সেশন শুরু করতে দেয়।

আপনার TileService তৈরি ও ঘোষণা করা

আপনার টাইলের জন্য এমন একটি পরিষেবা তৈরি করুন যা TileService ক্লাসকে এক্সটেন্ড করে।

class MyQSTileService : TileService() {

    // Called when the user adds your tile.
    override fun onTileAdded() {
        super.onTileAdded()
    }
    // Called when your app can update your tile.
    override fun onStartListening() {
        super.onStartListening()
    }

    // Called when your app can no longer update your tile.
    override fun onStopListening() {
        super.onStopListening()
    }

    // Called when the user taps on your tile in an active or inactive state.
    override fun onClick() {
        super.onClick()
    }
    // Called when the user removes your tile.
    override fun onTileRemoved() {
        super.onTileRemoved()
    }
}

আপনার অ্যাপের ম্যানিফেস্ট ফাইলে TileService ঘোষণা করুন। আপনার TileService-এর নাম ও লেবেল যোগ করুন (android:label-এর জন্য সর্বাধিক ১৮টি অক্ষর), আগের বিভাগে আপনার তৈরি করা কাস্টম আইকন এবং উপযুক্ত অনুমতি।

 <!-- 18-character limit for android:label. -->
 <service
     android:name=".MyQSTileService"
     android:exported="true"
     android:label="@string/my_default_tile_label"
     android:icon="@drawable/my_default_icon_label"
     android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
     <intent-filter>
         <action android:name="android.service.quicksettings.action.QS_TILE" />
     </intent-filter>
 </service>

আপনার TileService ম্যানেজ করা

আপনার অ্যাপ ম্যানিফেস্টে TileService তৈরি ও ঘোষণা করার পরে, আপনাকে সেটির স্টেট ম্যানেজ করতে হবে।

TileService হল একটি বাউন্ড পরিষেবা। আপনার অ্যাপ অনুরোধ করলে অথবা সিস্টেমকে এটির সাথে যোগাযোগ করতে হলে, আপনার TileService আবদ্ধ হয়। একটি সাধারণ বাউন্ড-সার্ভিস লাইফসাইকেলে নিম্নলিখিত চারটি কলব্যাক পদ্ধতি থাকে: onCreate(), onBind(), onUnbind() এবং onDestroy(). প্রতিবার পরিষেবা নতুন লাইফসাইকেল ফেজে প্রবেশ করলে সিস্টেম এইসব পদ্ধতিকে আহ্বান করে।

TileService লাইফসাইকেল ওভারভিউ

বাউন্ড-সার্ভিসের লাইফসাইকেল কন্ট্রোল করা কলব্যাকের পাশাপাশি, আপনাকে অবশ্যই TileService লাইফসাইকেল-এর জন্য নির্দিষ্ট অন্যান্য পদ্ধতি প্রয়োগ করতে হবে। এইসব পদ্ধতিকে onCreate() ও onDestroy()-এর বাইরে কল করা হতে পারে, কারণ Service লাইফসাইকেল পদ্ধতি ও TileService লাইফসাইকেল পদ্ধতিকে দুটি আলাদা অ্যাসিঙ্ক্রোনাস থ্রেডে কল করা হয়।

TileService লাইফসাইকেলে নিম্নলিখিত পদ্ধতি থাকে, যেগুলি আপনার TileService প্রতিবার নতুন লাইফসাইকেল ফেজে প্রবেশ করলে সিস্টেমের মাধ্যমে ইনভোক করা হয়:

  • onTileAdded(): ব্যবহারকারী প্রথমবার আপনার টাইল যোগ করলে এবং ব্যবহারকারী আপনার টাইল সরিয়ে দিয়ে আবার যোগ করলে, শুধুমাত্র তখনই এই পদ্ধতিটি কল করা হয়। এককালীন ইনিশিয়ালাইজেশন করার জন্য এটিই সবচেয়ে উপযুক্ত সময়। তবে, এটি প্রয়োজনীয় সব ইনিশিয়ালাইজেশন নাও পূরণ করতে পারে।

  • onStartListening() এবং onStopListening(): আপনার অ্যাপ যখনই টাইল আপডেট করে, তখনই এই পদ্ধতিগুলি কল করা হয় এবং এগুলি প্রায়ই কল করা হয়। onStartListening() এবং onStopListening()-এর মধ্যে TileService আবদ্ধ থাকে, এর ফলে আপনার অ্যাপ টাইলে পরিবর্তন করতে এবং আপডেট পুশ করতে পারে।

  • onTileRemoved(): ব্যবহারকারী আপনার টাইল সরিয়ে দিলে তবেই এই পদ্ধতি কল করা হয়।

একটি লিসেনিং মোড বেছে নিন

আপনার TileService অ্যাক্টিভ মোড বা নন-অ্যাক্টিভ মোডে শোনে। আমরা অ্যাক্টিভ মোড ব্যবহার করার সাজেস্ট করি, যা আপনাকে অ্যাপ ম্যানিফেস্টে ঘোষণা করতে হবে। অন্যথায়, TileService হল স্ট্যান্ডার্ড মোড এবং এটি ঘোষণা করার প্রয়োজন নেই।

TileService আপনার onStartListening() এবং onStopListening() পেমেন্ট পদ্ধতির বাইরে কাজ করবে বলে ধরে নেবেন না।

TileService-এর জন্য অ্যাক্টিভ মোড ব্যবহার করুন যা নিজের প্রসেসে এর স্টেট শোনে ও মনিটর করে। অ্যাক্টিভ মোডে থাকা TileService, onTileAdded(), onTileRemoved(), ট্যাপ ইভেন্ট এবং অ্যাপ প্রসেস অনুরোধ করলে তার জন্য বাধ্য।

আপনার TileService-কে যদি এমন সময় বিজ্ঞপ্তি পাঠানো হয় যখন তার নিজস্ব প্রসেস অনুযায়ী টাইলের স্টেট আপডেট করা উচিত ছিল, তাহলে আমরা অ্যাক্টিভ মোড ব্যবহার করার সাজেশন দিই। অ্যাক্টিভ টাইল সিস্টেমের উপর চাপ কমায়, কারণ ব্যবহারকারীকে যখনই 'দ্রুত সেটিংস' প্যানেল দেখানো হয়, তখন সেগুলিকে প্রতিবারই বাইন্ড করতে হয় না।

স্ট্যাটিক TileService.requestListeningState() মেথডকে কল করে শোনার স্টেট শুরু করার অনুরোধ করা যায় এবং onStartListening()-এ কলব্যাক পাওয়া যায়।

আপনার অ্যাপের ম্যানিফেস্ট ফাইলে META_DATA_ACTIVE_TILE যোগ করে আপনি অ্যাক্টিভ মোড ঘোষণা করতে পারবেন।

<service ...>
    <meta-data android:name="android.service.quicksettings.ACTIVE_TILE"
       android:value="true" />
    ...
</service>

অ্যাক্টিভ নয় এমন মোড

অ্যাক্টিভ না থাকা মোড হল স্ট্যান্ডার্ড মোড। TileService অ্যাক্টিভ মোডে থাকে না যদি আপনার টাইল ব্যবহারকারীকে যখনই দেখানো হয় তখনই এটি বাউন্ড হয়। এর অর্থ হল, আপনার TileService মাঝে মাঝে তার নিয়ন্ত্রণের বাইরে তৈরি ও আবার লিঙ্ক করা হতে পারে। এছাড়াও, ব্যবহারকারী টাইল না দেখলে এটি আনবাইন্ড ও ধ্বংস করা হতে পারে।

ব্যবহারকারী তার 'দ্রুত সেটিংস' প্যানেল খোলার পরে আপনার অ্যাপ onStartListening()-এ একটি কলব্যাক পায়। আপনি onStartListening() থেকে onStopListening()-এর মধ্যে যতবার চান ততবার আপনার Tile অবজেক্ট আপডেট করতে পারবেন।

আপনাকে নন-অ্যাক্টিভ মোড ঘোষণা করতে হবে না: আপনার অ্যাপের ম্যানিফেস্ট ফাইলে META_DATA_ACTIVE_TILE যোগ করবেন না।

টাইল স্টেটের ওভারভিউ

কোনও ব্যবহারকারী আপনার টাইল যোগ করার পরে, এটি সবসময় নিম্নলিখিত কোনও একটি অবস্থায় থাকে।

  • STATE_ACTIVE: চালু বা এনাবল করা আছে এমন স্ট্যাটাস বোঝায়। এই অবস্থায় থাকাকালীন ব্যবহারকারী আপনার টাইলের সাথে ইন্টার‍্যাক্ট করতে পারবেন।

    যেমন, ফিটনেস অ্যাপ টাইল ব্যবহারকারীকে সময়সীমা সেট করা ওয়ার্কআউট সেশন শুরু করতে দেয়, STATE_ACTIVE বলতে বোঝায় যে ব্যবহারকারী ওয়ার্কআউট সেশন শুরু করেছেন এবং টাইমার চলছে।

  • STATE_INACTIVE: বন্ধ বা পজ করা অবস্থা বোঝায়। এই অবস্থায় থাকাকালীন ব্যবহারকারী আপনার টাইলের সাথে ইন্টার‍্যাক্ট করতে পারবেন।

    ফিটনেস অ্যাপ টাইল উদাহরণটি আবার ব্যবহার করতে, STATE_INACTIVE-এ একটি টাইল এর অর্থ হল ব্যবহারকারী কোনও ওয়ার্ক-আউট সেশন শুরু করেননি, তবে চাইলে তা করতে পারেন।

  • STATE_UNAVAILABLE: সাময়িকভাবে উপলভ্য না থাকার অবস্থা বোঝায়। এই অবস্থায় ব্যবহারকারী আপনার টাইলের সাথে ইন্টার‍্যাক্ট করতে পারবেন না।

    যেমন, STATE_UNAVAILABLE-এ কোনও টাইল মানে হল, কোনও কারণে টাইলটি বর্তমানে ব্যবহারকারীর জন্য উপলভ্য নেই।

সিস্টেম শুধুমাত্র আপনার Tile অবজেক্টের প্রাথমিক অবস্থা সেট করে। আপনি সেটির লাইফসাইকেলের বাকি অংশ জুড়ে Tile অবজেক্টের স্টেট সেট করেন।

সিস্টেম আপনার Tile অবজেক্টের অবস্থা বোঝাতে টাইল আইকন ও ব্যাকগ্রাউন্ডে হালকা রঙ যোগ করতে পারে। Tile অবজেক্ট STATE_ACTIVE হিসেবে সেট করা থাকলে সবচেয়ে গাঢ় হয়, সাথে STATE_INACTIVE ও STATE_UNAVAILABLE ক্রমশ হালকা হতে থাকে। সঠিক হিউ প্রস্তুতকারক ও ভার্সনের উপর নির্ভর করে।

অবজেক্টের অবস্থা বোঝাতে VPN টাইল টিন্ট করা হয়
ছবি ৪. টাইল স্ট্যাটাস (অ্যাক্টিভ, ইনঅ্যাক্টিভ ও উপলভ্য নয়, যথাক্রমে) বোঝানোর জন্য টাইল টিন্ট করার উদাহরণ।

আপনার টাইল আপডেট করা

onStartListening() নম্বরে কলব্যাক পেলে আপনি নিজের টাইলের তথ্য আপডেট করতে পারবেন। টাইলের মোডের উপর নির্ভর করে, onStopListening()-এ কলব্যাক না পাওয়া পর্যন্ত আপনার টাইলের তথ্য অন্তত একবার আপডেট করা হতে পারে।

অ্যাক্টিভ মোডে, onStopListening()-এ কলব্যাক পাওয়ার আগে আপনি ঠিক একবার আপনার টাইলের তথ্য আপডেট করতে পারবেন। অ্যাক্টিভ না থাকা মোডে, আপনি onStartListening() থেকে onStopListening()-এর মধ্যে যতবার চান আপনার টাইল আপডেট করতে পারবেন।

getQsTile() নম্বরে কল করে আপনার Tile অবজেক্টটি ফেরত পেতে পারেন। আপনার Tile অবজেক্টের নির্দিষ্ট ফিল্ড আপডেট করতে, নিম্নলিখিত পদ্ধতি কল করুন:

Tile অবজেক্টের ফিল্ডে সঠিক ভ্যালু সেট করা হয়ে গেলে, আপনার টাইলের তথ্য আপডেট করতে updateTile() কল করতে হবে। এর ফলে সিস্টেম আপডেট করা টাইল ডেটা পার্স করবে এবং UI আপডেট করবে।

data class StateModel(val enabled: Boolean, val label: String, val icon: Icon)

override fun onStartListening() {
    super.onStartListening()
    val state = getStateFromService()
    qsTile.label = state.label
    qsTile.contentDescription = state.label
    qsTile.state = if (state.enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
    qsTile.icon = state.icon
    qsTile.updateTile()
}

হ্যান্ডেল ট্যাপ করা

আপনার টাইল STATE_ACTIVE বা STATE_INACTIVE অবস্থায় থাকলে, ব্যবহারকারীরা অ্যাকশন ট্রিগার করতে আপনার টাইলে ট্যাপ করতে পারবেন। সিস্টেম তারপরে আপনার অ্যাপের onClick() কলব্যাক ইনভোক করে।

আপনার অ্যাপ onClick()-এ কলব্যাক পেলে, এটি একটি ডায়ালগ বা অ্যাক্টিভিটি লঞ্চ করতে, ব্যাকগ্রাউন্ড কাজ ট্রিগার করতে বা আপনার টাইলের স্টেট পরিবর্তন করতে পারে।

var counter = 0
override fun onClick() {
    super.onClick()
    counter++
    qsTile.state = if (counter % 2 == 0) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
    qsTile.label = "Clicked $counter times"
    qsTile.contentDescription = qsTile.label
    qsTile.updateTile()
}

ডায়ালগ লঞ্চ করা

showDialog() দ্রুত সেটিংস প্যানেলটি আড়াল করে এবং একটি ডায়ালগ দেখায়। অতিরিক্ত ইনপুট বা ব্যবহারকারীর সম্মতি প্রয়োজন হলে, আপনার অ্যাকশনে কন্টেক্সট যোগ করতে ডায়ালগ ব্যবহার করুন।

অ্যাক্টিভিটি লঞ্চ করা

startActivityAndCollapse() প্যানেল আড়াল করার সময় কোনও অ্যাক্টিভিটি শুরু করে। ডায়ালগে দেখানোর চেয়ে বেশি বিস্তারিত তথ্য থাকলে অথবা আপনার অ্যাকশন অত্যন্ত ইন্ট্যার‍্যাক্টিভ হলে অ্যাক্টিভিটি কাজে লাগে।

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

কোনও টাইলের উপর কিছুক্ষণ ট্যাপ করলে ব্যবহারকারীর জন্য অ্যাপ সংক্রান্ত তথ্য স্ক্রিন খুলে যায়। এই আচরণকে ওভাররাইড করতে এবং পরিবর্তে পছন্দ সেট করার জন্য একটি অ্যাক্টিভিটি লঞ্চ করতে, আপনার অ্যাক্টিভিটির মধ্যে একটিতে ACTION_QS_TILE_PREFERENCES-এর সাথে একটি <intent-filter> যোগ করুন।

Android API 28 থেকে শুরু করে, PendingIntent-এ অবশ্যই Intent.FLAG_ACTIVITY_NEW_TASK থাকতে হবে:

if (Build.VERSION.SDK_INT >= 28) {
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}

বিকল্প হিসেবে, আপনি নির্দিষ্ট AndroidManifest.xml বিভাগে ফ্ল্যাগ যোগ করতে পারেন Activity।

আপনার টাইল টগল করা যাবে হিসেবে চিহ্নিত করুন

আপনার টাইল যদি মূলত টু-স্টেট সুইচ (যা টাইলগুলির সবচেয়ে সাধারণ আচরণ) হিসেবে কাজ করে, তাহলে আমরা এটিকে টগল করা যায় এমন হিসেবে চিহ্নিত করার সাজেশন দিই। এটি অপারেটিং সিস্টেমকে টাইলের আচরণ সম্পর্কে তথ্য প্রদান করতে এবং সামগ্রিক অ্যাক্সেসিবিলিটি উন্নত করতে সাহায্য করে।

আপনার টাইল টগল করা যাবে হিসেবে চিহ্নিত করতে TOGGLEABLE_TILE মেটাডেটা true হিসেবে সেট করুন।

<service ...>
  <meta-data android:name="android.service.quicksettings.TOGGLEABLE_TILE"
    android:value="true" />
</service>

নিরাপদে লক করা ডিভাইসে শুধুমাত্র নিরাপদ অ্যাকশন পারফর্ম করা

লক করা ডিভাইসে আপনার টাইল লক স্ক্রিনের উপরে দেখানো হতে পারে। টাইলে সংবেদনশীল তথ্য থাকলে, ডিভাইস সুরক্ষিত অবস্থায় আছে কিনা তা নির্ধারণ করতে, isSecure()-এর ভ্যালু চেক করুন এবং সেই অনুযায়ী আপনার TileService-এর আচরণ পরিবর্তন করা উচিত।

লক থাকা অবস্থায় টাইল অ্যাকশন নিরাপদে পারফর্ম করা গেলে, startActivity() ব্যবহার করে লক স্ক্রিনের উপরে অ্যাক্টিভিটি লঞ্চ করুন।

টাইল অ্যাকশনটি নিরাপদ না হলে, ব্যবহারকারীকে তার ডিভাইস আনলক করার জন্য প্রম্পট করতে unlockAndRun() ব্যবহার করুন। সফল হলে, আপনি এই মেথডে যে Runnable অবজেক্ট পাস করেন, সিস্টেম সেটি এক্সিকিউট করে।

আপনার টাইলকে শ্রেণীবদ্ধ করুন

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

প্রয়োগ

আপনার TileService-এর জন্য কোনও বিভাগ নির্দিষ্ট করতে, AndroidManifest.xml ফাইলে পরিষেবা ঘোষণায় একটি মেটাডেটা ফিল্ড যোগ করুন:

  • আপনার AndroidManifest.xml-এ, আপনার TileService-এর জন্য <service> এলিমেন্টের মধ্যে, একটি <meta-data> এলিমেন্ট যোগ করুন।
  • android:name: এই ভ্যালু android.service.quicksettings.TILE_CATEGORY হিসেবে সেট করুন।
  • android:value: আগে থেকে সংজ্ঞায়িত বিভাগ ধ্রুবকগুলির মধ্যে একটি অ্যাসাইন করুন, যেমন android.service.quicksettings.CATEGORY_CONNECTIVITY বা android.service.quicksettings.CATEGORY_DISPLAY।

নিচে দেওয়া উদাহরণে যেমন দেখানো হয়েছে:

<service
    android:name=".MyConnectivityTileService"
    [...]
    >
    <meta-data android:name="android.service.quicksettings.TILE_CATEGORY"
        android:value="android.service.quicksettings.CATEGORY_CONNECTIVITY" />
</service>

API-তে বেছে নেওয়ার জন্য পূর্বনির্ধারিত বিভাগের একটি সেট দেওয়া আছে। এইসব বিভাগকে TileService ক্লাসের মধ্যে স্ট্রিং কনস্ট্যান্ট হিসেবে সংজ্ঞায়িত করা হয়।

কোনও বিভাগ নির্দিষ্ট করা না থাকলে, সিস্টেম অটোমেটিক একটি ডিফল্ট বিভাগ অ্যাসাইন করে:

  • সিস্টেম অ্যাপ থেকে: সিস্টেম অ্যাপ্লিকেশনের অংশ এমন টাইলসের জন্য।
  • আপনার ইনস্টল করা অ্যাপ থেকে: ব্যবহারকারীর ইনস্টল করা অ্যাপ্লিকেশন থেকে পাওয়া টাইলসের জন্য।

যদিও Google Pixel ডিভাইস 'দ্রুত সেটিংস'-এ বিভাগ ব্যবহার করে, OEM তাদের নিজ নিজ সিস্টেম UI-তে এই বিভাগ সংক্রান্ত তথ্য ব্যবহার করতে বা উপেক্ষা করতে পারে।

আপনার টাইল যোগ করার জন্য ব্যবহারকারীকে প্রম্পট করা

ম্যানুয়ালি আপনার টাইল যোগ করতে, ব্যবহারকারীকে একাধিক ধাপ অনুসরণ করতে হবে:

  1. দ্রুত সেটিংস প্যানেল খুলতে নিচের দিকে সোয়াইপ করুন।
  2. 'এডিট করুন' বোতামে ট্যাপ করুন।
  3. আপনার ডিভাইস খুঁজে না পাওয়া পর্যন্ত তার ডিভাইসে সবকটি টাইল স্ক্রল করে দেখুন।
  4. আপনার টাইলটি ধরে রেখে, চালু থাকা টাইলগুলির তালিকায় টেনে আনুন।

এছাড়াও, ব্যবহারকারী যেকোনও সময় আপনার টাইল সরাতে বা সরিয়ে দিতে পারবেন।

Android 13 থেকে শুরু করে, আপনি requestAddTileService() পদ্ধতি ব্যবহার করতে পারবেন, যাতে ব্যবহারকারীরা কোনও ডিভাইসে আপনার টাইল অনেক সহজে যোগ করতে পারেন। এই পদ্ধতি ব্যবহারকারীদের তাদের দ্রুত সেটিংস প্যানেলে সরাসরি আপনার টাইল যোগ করার অনুরোধ জানায়। প্রম্পটে অ্যাপ্লিকেশনের নাম, প্রদত্ত লেবেল, ও আইকন অন্তর্ভুক্ত থাকে।

দ্রুত সেটিংস প্লেসমেন্ট API প্রম্পট
ছবি ৫. দ্রুত সেটিংস প্লেসমেন্ট API প্রম্পট।
public void requestAddTileService (
  ComponentName tileServiceComponentName,
  CharSequence tileLabel,
  Icon icon,
  Executor resultExecutor,
  Consumer<Integer> resultCallback
)

কলব্যাক থেকে জানা যায় যে টাইল যোগ করা হয়েছে কিনা, যোগ করা হয়নি, আগে থেকেই ছিল কিনা অথবা কোনও সমস্যা হয়েছে কিনা।

ব্যবহারকারীদের কখন এবং কত ঘনঘন প্রম্পট দেখানো হবে সেই বিষয়ে সিদ্ধান্ত নেওয়ার সময় নিজের বুদ্ধি-বিবেচনা কাজে লাগান। আমরা সাজেস্ট করি যে requestAddTileService() শুধুমাত্র প্রাসঙ্গিক ক্ষেত্রে কল করুন, যেমন ব্যবহারকারী যখন প্রথমবার এমন কোনও ফিচারের সাথে ইন্টার‍্যাক্ট করেন যা আপনার টাইল সুবিধা দেয়।

ব্যবহারকারী যদি আগে থেকেই কোনও নির্দিষ্ট ComponentName অনুরোধ একাধিকবার প্রত্যাখ্যান করে থাকেন, তাহলে সিস্টেম সেই অনুরোধ প্রসেস করা বন্ধ করে দিতে পারে। এই পরিষেবা যে Context ব্যবহার করে পাওয়া গেছে, তার থেকে ব্যবহারকারীকে নির্ধারণ করা হয়: এটি বর্তমান ব্যবহারকারীর সাথে মিলতে হবে।