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

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

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

टाइल कब बनानी चाहिए

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

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

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

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

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

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

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

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

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

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

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

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

आपको एक कस्टम आइकॉन देना होगा. यह आइकॉन, QuickSettings पैनल में मौजूद टाइल पर दिखता है. (अगले सेक्शन में बताए गए 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 ऑब्जेक्ट के कुछ फ़ील्ड अपडेट करने के लिए, इन तरीकों का इस्तेमाल करें:

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

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() पैनल को छोटा करते समय कोई गतिविधि शुरू करता है. अगर आपको डायलॉग बॉक्स में दिखाने के मुकाबले ज़्यादा जानकारी दिखानी है या आपकी कार्रवाई बहुत ज़्यादा इंटरैक्टिव है, तो गतिविधियां काम की होती हैं.

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

किसी टाइल को देर तक दबाने पर, उपयोगकर्ता को ऐप्लिकेशन की जानकारी स्क्रीन दिखती है. इस व्यवहार को बदलने के लिए, अपनी किसी गतिविधि में <intent-filter> जोड़ें. इसके लिए, ACTION_QS_TILE_PREFERENCES का इस्तेमाल करें. इससे, प्राथमिकताओं को सेट करने के लिए गतिविधि लॉन्च की जा सकेगी.

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