अपने ऐप्लिकेशन के लिए पसंद के मुताबिक, क्विक सेटिंग टाइल बनाएं

क्विक सेटिंग, क्विक सेटिंग पैनल में दिखने वाली टाइलें होती हैं. ये टाइलें, कार्रवाइयों को दिखाती हैं. उपयोगकर्ता इन पर टैप करके, बार-बार किए जाने वाले टास्क को तुरंत पूरा कर सकते हैं. आपका ऐप्लिकेशन, TileService क्लास की मदद से लोगों को कस्टम टाइल उपलब्ध करा सकता है. साथ ही, टाइल की स्थिति को ट्रैक करने के लिए Tile ऑब्जेक्ट का इस्तेमाल कर सकता है. उदाहरण के लिए, ऐसी टाइल बनाई जा सकती है जिसकी मदद से उपयोगकर्ता, आपके ऐप्लिकेशन से मिले वीपीएन को चालू या बंद कर सकें.

क्विक सेटिंग पैनल में, वीपीएन टाइल को चालू और बंद किया गया है
पहली इमेज. वीपीएन टाइल के चालू और बंद होने के साथ क्विक सेटिंग पैनल.

टाइल कब बनानी है

हमारा सुझाव है कि आप उन सुविधाओं के लिए टाइल बनाएं जिन्हें उपयोगकर्ता अक्सर ऐक्सेस करते हैं या जिन्हें वे तुरंत ऐक्सेस करना चाहते हैं. सबसे असरदार टाइलें वे होती हैं जिनमें ये दोनों खूबियां होती हैं. इनसे अक्सर की जाने वाली कार्रवाइयों को तुरंत ऐक्सेस किया जा सकता है.

उदाहरण के लिए, फ़िटनेस ऐप्लिकेशन के लिए एक टाइल बनाई जा सकती है. इससे उपयोगकर्ता, कसरत का सेशन तुरंत शुरू कर पाएंगे. हालांकि, हम एक ही ऐप्लिकेशन के लिए ऐसी टाइल बनाने का सुझाव नहीं देंगे जिससे लोग अपने पूरे वर्कआउट का इतिहास देख सकें.

फ़िटनेस ऐप्लिकेशन की टाइल इस्तेमाल करने के उदाहरण
दूसरी इमेज. फ़िटनेस ऐप्लिकेशन के लिए, सुझाई गई और न सुझाई गई टाइलों के उदाहरण.

हमारा सुझाव है कि आप यहां दिए गए तरीकों का इस्तेमाल न करें, ताकि आपकी टाइल को आसानी से खोजा जा सके और उसका इस्तेमाल किया जा सके:

  • ऐप्लिकेशन लॉन्च करने के लिए, टाइल का इस्तेमाल न करें. इसके बजाय, ऐप्लिकेशन के शॉर्टकट या स्टैंडर्ड लॉन्चर का इस्तेमाल करें.

  • उपयोगकर्ता की एक बार की जाने वाली कार्रवाइयों के लिए, टाइल का इस्तेमाल न करें. इसके बजाय, ऐप्लिकेशन के शॉर्टकट या सूचना का इस्तेमाल करें.

  • बहुत ज़्यादा टाइलें बनाने से बचें. हमारा सुझाव है कि हर ऐप्लिकेशन के लिए, ज़्यादा से ज़्यादा दो शॉर्टकट इस्तेमाल करें. इसके बजाय, ऐप्लिकेशन के शॉर्टकट का इस्तेमाल करें.

  • ऐसी टाइलों का इस्तेमाल न करें जो जानकारी दिखाती हैं, लेकिन उपयोगकर्ताओं के लिए इंटरैक्टिव नहीं हैं. इसके बजाय, सूचना या विजेट का इस्तेमाल करें.

अपनी टाइल बनाना

टाइल बनाने के लिए, आपको सबसे पहले एक सही टाइल आइकॉन बनाना होगा. इसके बाद, ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में TileService बनाएं और उसे घोषित करें.

जब उपयोगकर्ता ने इसे जोड़ लिया हो.

क्विक सेटिंग के सैंपल में, टाइल बनाने और उसे मैनेज करने का तरीका बताया गया है.

अपनी पसंद के मुताबिक आइकॉन बनाना

आपको एक कस्टम आइकॉन देना होगा. यह आइकॉन, क्विक सेटिंग पैनल में मौजूद टाइल पर दिखता है. (अगले सेक्शन में बताए गए TileService का एलान करते समय, आपको यह आइकॉन जोड़ना होगा.) आइकॉन का रंग सफ़ेद होना चाहिए और उसका बैकग्राउंड पारदर्शी होना चाहिए. साथ ही, उसका साइज़ 24 x 24 डीपी होना चाहिए और वह VectorDrawable के फ़ॉर्म में होना चाहिए.

ड्रॉ करने लायक वेक्टर का उदाहरण
तीसरी इमेज. ड्रॉ करने लायक वेक्टर का उदाहरण.

ऐसा आइकॉन बनाएं जिससे आपकी टाइल के मकसद के बारे में पता चले. इससे लोगों को यह आसानी से पता चल जाता है कि आपकी टाइल उनकी ज़रूरतों के हिसाब से सही है या नहीं. उदाहरण के लिए, फ़िटनेस ऐप्लिकेशन की किसी टाइल के लिए स्टॉपवॉच का आइकॉन बनाया जा सकता है. इस ऐप्लिकेशन की मदद से, उपयोगकर्ता वर्कआउट सेशन शुरू कर सकते हैं.

TileService बनाना और उसे घोषित करना

अपनी टाइल के लिए एक ऐसी सेवा बनाएं जो TileService क्लास को बढ़ाती हो.

Kotlin

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()
  }
}

Java

public class MyQSTileService extends TileService {

  // Called when the user adds your tile.
  @Override
  public void onTileAdded() {
    super.onTileAdded();
  }

  // Called when your app can update your tile.
  @Override
  public void onStartListening() {
    super.onStartListening();
  }

  // Called when your app can no longer update your tile.
  @Override
  public void onStopListening() {
    super.onStopListening();
  }

  // Called when the user taps on your tile in an active or inactive state.
  @Override
  public void onClick() {
    super.onClick();
  }

  // Called when the user removes your tile.
  @Override
  public void onTileRemoved() {
    super.onTileRemoved();
  }
}

अपने ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल में, TileService का एलान करें. अपने TileService का नाम और लेबल जोड़ें. साथ ही, पिछले सेक्शन में बनाया गया कस्टम आइकॉन और ज़रूरी अनुमति जोड़ें.

 <service
     android:name=".MyQSTileService"
     android:exported="true"
     android:label="@string/my_default_tile_label"  // 18-character limit.
     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(): जब भी आपका ऐप्लिकेशन टाइल को अपडेट करता है, तब इन तरीकों को कॉल किया जाता है. इन्हें अक्सर कॉल किया जाता है. TileService, onStartListening() और onStopListening() के बीच बाइंड रहता है. इससे आपका ऐप्लिकेशन, टाइल में बदलाव कर सकता है और अपडेट पुश कर सकता है.

  • 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 को कभी-कभी फिर से बनाया और बाइंड किया जा सकता है. जब उपयोगकर्ता टाइल नहीं देख रहा होता है, तब इसे अनबाउंड और डिस्ट्रॉय भी किया जा सकता है.

जब उपयोगकर्ता Quick Settings पैनल खोलता है, तब आपका ऐप्लिकेशन 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_INACTIVE और STATE_UNAVAILABLE पर सेट किए गए ऑब्जेक्ट का रंग हल्का होता जाता है.STATE_ACTIVE सटीक रंग, मैन्युफ़ैक्चरर और वर्शन के हिसाब से अलग-अलग होता है.

ऑब्जेक्ट की स्थितियों को दिखाने के लिए, वीपीएन टाइल को हल्का रंग दिया गया है
चौथी इमेज. टाइलों की स्थिति (चालू, बंद, और उपलब्ध नहीं है) को दिखाने के लिए, उन्हें रंगीन करने के उदाहरण.

अपनी टाइल अपडेट करना

आपको onStartListening() पर कॉल बैक मिलने के बाद, टाइल को अपडेट किया जा सकता है. टाइटल के मोड के आधार पर, onStopListening() पर कॉल बैक मिलने तक, टाइटल को कम से कम एक बार अपडेट किया जा सकता है.

ऐक्टिव मोड में, onStopListening() से कॉल बैक मिलने से पहले, अपनी टाइल को सिर्फ़ एक बार अपडेट किया जा सकता है. ऐक्टिव मोड में नहीं होने पर, onStartListening() और onStopListening() के बीच, अपनी टाइल को जितनी बार चाहें उतनी बार अपडेट किया जा सकता है.

getQsTile() को कॉल करके, अपना Tile ऑब्जेक्ट वापस पाया जा सकता है. अपने Tile ऑब्जेक्ट के कुछ फ़ील्ड अपडेट करने के लिए, इन तरीकों का इस्तेमाल करें:

updateTile() ऑब्जेक्ट के फ़ील्ड की वैल्यू सही तरीके से सेट करने के बाद, आपको अपनी टाइल को अपडेट करने के लिए updateTile() को कॉल करना होगा.Tile इससे सिस्टम, अपडेट किए गए टाइल डेटा को पार्स करेगा और यूज़र इंटरफ़ेस (यूआई) को अपडेट करेगा.

Kotlin

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 = tile.label
  qsTile.state = if (state.enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
  qsTile.icon = state.icon
  qsTile.updateTile()
}

Java

public class StateModel {
  final boolean enabled;
  final String label;
  final Icon icon;

  public StateModel(boolean e, String l, Icon i) {
    enabled = e;
    label = l;
    icon = i;
  }
}

@Override
public void onStartListening() {
  super.onStartListening();
  StateModel state = getStateFromService();
  Tile tile = getQsTile();
  tile.setLabel(state.label);
  tile.setContentDescription(state.label);
  tile.setState(state.enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
  tile.setIcon(state.icon);
  tile.updateTile();
}

टैप मैनेज करना

अगर आपकी टाइल STATE_ACTIVE या STATE_INACTIVE में है, तो उपयोगकर्ता उस पर टैप करके कोई कार्रवाई ट्रिगर कर सकते हैं. इसके बाद, सिस्टम आपके ऐप्लिकेशन के onClick() कॉलबैक को शुरू करता है.

जब आपका ऐप्लिकेशन onClick() पर कॉलबैक करता है, तो वह डायलॉग या गतिविधि लॉन्च कर सकता है, बैकग्राउंड में काम शुरू कर सकता है या आपकी टाइल की स्थिति बदल सकता है.

Kotlin

var clicks = 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()
}

Java

int clicks = 0;

@Override
public void onClick() {
  super.onClick();
  counter++;
  Tile tile = getQsTile();
  tile.setState((counter % 2 == 0) ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
  tile.setLabel("Clicked " + counter + " times");
  tile.setContentDescription(tile.getLabel());
  tile.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>

एपीआई, चुनने के लिए पहले से तय की गई कैटगरी का सेट उपलब्ध कराता है. इन कैटगरी को TileService क्लास में स्ट्रिंग कॉन्स्टेंट के तौर पर तय किया जाता है.

अगर कोई कैटगरी नहीं दी जाती है, तो सिस्टम अपने-आप डिफ़ॉल्ट कैटगरी असाइन कर देता है:

  • सिस्टम ऐप्लिकेशन से: उन टाइल के लिए जो किसी सिस्टम ऐप्लिकेशन का हिस्सा हैं.
  • आपके इंस्टॉल किए गए ऐप्लिकेशन से: उपयोगकर्ता के इंस्टॉल किए गए ऐप्लिकेशन की टाइल के लिए.

Google Pixel डिवाइसों में, क्विक सेटिंग में मौजूद कैटगरी का इस्तेमाल किया जाता है. हालांकि, ओईएम अपने सिस्टम यूज़र इंटरफ़ेस (यूआई) में, इस कैटगरी की जानकारी का इस्तेमाल कर सकते हैं या इसे अनदेखा कर सकते हैं.

उपयोगकर्ता को आपकी टाइल जोड़ने के लिए प्रॉम्प्ट करना

मैन्युअल तरीके से टाइल जोड़ने के लिए, उपयोगकर्ताओं को ये चरण पूरे करने होंगे:

  1. क्विक सेटिंग का पैनल खोलने के लिए, नीचे की ओर स्वाइप करें.
  2. 'बदलाव करें' बटन पर टैप करें.
  3. उन्हें अपने डिवाइस पर मौजूद सभी टाइल तब तक स्क्रोल करनी होंगी, जब तक उन्हें आपकी टाइल न मिल जाए.
  4. अपनी टाइल को दबाकर रखें और उसे इस्तेमाल की जा रही टाइलों की सूची में खींचें.

उपयोगकर्ता के पास, आपकी टाइल को किसी भी समय हटाने या उसकी जगह बदलने का विकल्प होता है.

Android 13 से, requestAddTileService() तरीके का इस्तेमाल किया जा सकता है. इससे, उपयोगकर्ताओं के लिए डिवाइस में आपकी टाइल जोड़ना बहुत आसान हो जाएगा. इस तरीके से, उपयोगकर्ताओं को एक अनुरोध दिखता है. इसमें उन्हें आपकी टाइल को सीधे तौर पर क्विक सेटिंग पैनल में जोड़ने के लिए कहा जाता है. प्रॉम्प्ट में ऐप्लिकेशन का नाम, दिया गया लेबल, और आइकॉन शामिल होता है.

Quick Settings Placement API का प्रॉम्प्ट
पांचवीं इमेज. क्विक सेटिंग प्लेसमेंट एपीआई प्रॉम्प्ट.
public void requestAddTileService (
  ComponentName tileServiceComponentName,
  CharSequence tileLabel,
  Icon icon,
  Executor resultExecutor,
  Consumer<Integer> resultCallback
)

कॉल बैक में यह जानकारी होती है कि टाइल को जोड़ा गया है या नहीं. अगर टाइल पहले से मौजूद है, तो उसे नहीं जोड़ा जाता. साथ ही, इसमें यह भी बताया जाता है कि कोई गड़बड़ी हुई है या नहीं.

उपयोगकर्ताओं को कब और कितनी बार सूचना देनी है, यह तय करने के लिए अपनी सूझ-बूझ का इस्तेमाल करें. हमारा सुझाव है कि requestAddTileService() को सिर्फ़ कॉन्टेक्स्ट में कॉल करें. जैसे, जब उपयोगकर्ता पहली बार उस सुविधा से इंटरैक्ट करता है जिसे आपकी टाइल इस्तेमाल करती है.

अगर किसी ComponentName के लिए उपयोगकर्ता ने पहले कई बार अनुरोध अस्वीकार किया है, तो सिस्टम उस ComponentName के लिए अनुरोधों को प्रोसेस करना बंद कर सकता है. उपयोगकर्ता की पहचान, इस सेवा को वापस पाने के लिए इस्तेमाल किए गए Context से की जाती है. यह मौजूदा उपयोगकर्ता से मेल खाना चाहिए.