सुरक्षा केंद्र से इंटरैक्ट करना

सुरक्षा केंद्र पर रीडायरेक्ट करें

कोई भी ऐप्लिकेशन, सुरक्षा केंद्र को खोल सकता है. इसके लिए, android.content.Intent.ACTION_SAFETY_CENTER कार्रवाई (स्ट्रिंग वैल्यू android.intent.action.SAFETY_CENTER).

सुरक्षा केंद्र खोलने के लिए, किसी Activity इंस्टेंस से कॉल करें:

Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER);

startActivity(openSafetyCenterIntent);

किसी खास समस्या पर रीडायरेक्ट करना

इसका इस्तेमाल करके किसी खास सुरक्षा केंद्र चेतावनी कार्ड पर भी रीडायरेक्ट किया जा सकता है इंटेंट एक्स्ट्रा के साथ. इन अतिरिक्त चीज़ों का इस्तेमाल तीसरा पक्ष नहीं करता है, इसलिए वे SafetyCenterManager का हिस्सा हैं, जो @SystemApi का हिस्सा है. सिर्फ़ सिस्टम ऐप्लिकेशन इन अतिरिक्त चीज़ों को ऐक्सेस कर सकते हैं.

ऐसे इंटेंट अतिरिक्त जो किसी खास चेतावनी कार्ड को रीडायरेक्ट करते हैं:

  • EXTRA_SAFETY_SOURCE_ID
    • स्ट्रिंग का मान: android.safetycenter.extra.SAFETY_SOURCE_ID
    • स्ट्रिंग का टाइप: स्ट्रिंग से जुड़े सुरक्षा सोर्स के आईडी के बारे में बताता है चेतावनी वाला कार्ड
    • समस्या पर रीडायरेक्ट करने के लिए ज़रूरी है, ताकि वह सही तरीके से काम करे
  • EXTRA_SAFETY_SOURCE_ISSUE_ID
    • स्ट्रिंग का मान: android.safetycenter.extra.SAFETY_SOURCE_ISSUE_ID
    • स्ट्रिंग का टाइप: इससे चेतावनी कार्ड का आईडी पता चलता है
    • समस्या पर रीडायरेक्ट करने के लिए ज़रूरी है, ताकि वह सही तरीके से काम करे
  • EXTRA_SAFETY_SOURCE_USER_HANDLE
    • स्ट्रिंग का मान: android.safetycenter.extra.SAFETY_SOURCE_USER_HANDLE
    • UserHandle टाइप: इससे जुड़ी चेतावनी के लिए, UserHandle के बारे में जानकारी देता है कार्ड वाले गेम
    • ज़रूरी नहीं (डिफ़ॉल्ट तौर पर, यह मौजूदा उपयोगकर्ता पर सेट होता है)

नीचे दिए गए कोड स्निपेट को किसी Activity इंस्टेंस में खोलकर सुरक्षा केंद्र की स्क्रीन पर देखें:

UserHandle theUserHandleThisIssueCameFrom = …;

Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER)
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_ID, "TheSafetySourceIdThisIssueCameFrom")
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_ISSUE_ID, "TheSafetySourceIssueIdToRedirectTo")
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCE_USER_HANDLE, theUserHandleThisIssueCameFrom);

startActivity(openSafetyCenterIntent);

किसी खास सबपेज पर रीडायरेक्ट करना (Android 14 और नए वर्शन के लिए)

Android 14 या उसके बाद के वर्शन में, सुरक्षा केंद्र का पेज दो हिस्सों में बंटा होता है एक से ज़्यादा सबपेज में बदल दिया गया है, जो अलग-अलग SafetySourcesGroup ( Android 13 में, इसे छोटा किया जा सकने वाला वर्शन दिखाया जाता है).

इस इंटेंट का अतिरिक्त इस्तेमाल करके, किसी खास सबपेज पर रीडायरेक्ट किया जा सकता है:

  • EXTRA_SAFETY_SOURCES_GROUP_ID
    • स्ट्रिंग का मान: android.safetycenter.extra.SAFETY_SOURCES_GROUP_ID
    • स्ट्रिंग टाइप: SafetySourcesGroup के आईडी के बारे में बताता है
    • सबपेज पर रीडायरेक्ट करने के लिए ज़रूरी है, ताकि वह काम कर सके

नीचे दिए गए कोड स्निपेट को किसी Activity इंस्टेंस में खोलकर सुरक्षा केंद्र की स्क्रीन को किसी खास सबपेज पर ले जाने के लिए:

Intent openSafetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER)
.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROUP_ID, "TheSafetySourcesGroupId");

startActivity(openSafetyCenterIntent);

सुरक्षा केंद्र के सोर्स एपीआई का इस्तेमाल करना

सुरक्षा केंद्र के सोर्स एपीआई, इनका इस्तेमाल करके उपलब्ध हैं SafetyCenterManager (जो एक @SystemApi है). एपीआई प्लैटफ़ॉर्म का कोड इसमें उपलब्ध है कोड खोजें. एपीआई का लागू करने का कोड कोड में उपलब्ध है खोजें.

अनुमतियां

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

  • READ_SAFETY_CENTER_STATUS
    • signature|privileged
    • SafetyCenterManager#isSafetyCenterEnabled() एपीआई के लिए इस्तेमाल किया जाता है (नहीं सुरक्षा केंद्र स्रोतों के लिए ज़रूरी है, तो उन्हें सिर्फ़ SEND_SAFETY_CENTER_UPDATE अनुमति)
    • इसका इस्तेमाल, सिस्टम के वे ऐप्लिकेशन करते हैं जो यह देखते हैं कि सुरक्षा केंद्र चालू है या नहीं
    • सिर्फ़ अनुमति वाली सूची में शामिल सिस्टम ऐप्लिकेशन को ऐक्सेस दिया गया
  • SEND_SAFETY_CENTER_UPDATE
    • internal|privileged
    • चालू किए गए एपीआई और Safety सोर्स एपीआई के लिए इस्तेमाल किया जाता है
    • सिर्फ़ सुरक्षा सोर्स इस्तेमाल करते हैं
    • सिर्फ़ अनुमति वाली सूची में शामिल सिस्टम ऐप्लिकेशन को ऐक्सेस दिया गया

ये अनुमतियां खास लोगों के पास होती हैं. साथ ही, इन्हें सिर्फ़ इस सूची में जोड़कर हासिल किया जा सकता है उदाहरण के लिए, com.android.settings.xml सेटिंग ऐप्लिकेशन और ऐप्लिकेशन की AndroidManifest.xml फ़ाइल के लिए, फ़ाइल ट्रांसफ़र की जा सकती है. यहां जाएं: protectionLevel पर जाएं.

SafetyCenterManager पाएं

SafetyCenterManager एक @SystemApi क्लास है जिसे सिस्टम ऐप्लिकेशन से ऐक्सेस किया जा सकता है Android 13 और इसके बाद के वर्शन में. इस कॉल में बताया गया है कि SafetyCenterManager पाएं:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
  // Must be on T or above to interact with Safety Center.
  return;
}
SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
if (safetyCenterManager == null) {
  // Should not be null on T.
  return;
}

देखें कि सुरक्षा केंद्र चालू है या नहीं

इस कॉल में यह पता लगाया जाता है कि सुरक्षा केंद्र चालू है या नहीं. कॉल करने के लिए READ_SAFETY_CENTER_STATUS या SEND_SAFETY_CENTER_UPDATE अनुमति:

boolean isSafetyCenterEnabled = safetyCenterManager.isSafetyCenterEnabled();
if (isSafetyCenterEnabled) {
  // …
} else {
  // …
}

डेटा दें

सुरक्षा केंद्र के, दिए गए String sourceId के साथ सोर्स डेटा, Safety ऐप्लिकेशन को दिया जाता है SafetySourceData ऑब्जेक्ट को बीच में रखें, जो यूज़र इंटरफ़ेस (यूआई) एंट्री और समस्याओं की सूची (चेतावनी कार्ड). यूज़र इंटरफ़ेस (यूआई) एंट्री और चेतावनी कार्ड में ये चीज़ें हो सकती हैं SafetySourceData क्लास में गंभीरता के अलग-अलग लेवल के बारे में बताया गया है:

  • SEVERITY_LEVEL_UNSPECIFIED
    • कोई गंभीरता नहीं बताई गई है
    • रंग: धूसर या पारदर्शी (यहSafetySourcesGroup एंट्री)
    • इसका इस्तेमाल डाइनैमिक डेटा के लिए किया जाता है, जो यूज़र इंटरफ़ेस (यूआई) में स्टैटिक एंट्री के तौर पर दिखता है या इसे दिखाने के लिए होता है एक अनिर्दिष्ट एंट्री
    • चेतावनी वाले कार्ड के लिए इस्तेमाल नहीं किया जाना चाहिए
  • SEVERITY_LEVEL_INFORMATION
    • बुनियादी जानकारी या मामूली सुझाव
    • रंग: हरा
  • SEVERITY_LEVEL_RECOMMENDATION
    • उपयोगकर्ता को इस बात का सुझाव दिया जाए कि उसे इस समस्या पर कार्रवाई करनी चाहिए उन्हें खतरे में डाल सकता है
    • रंग: पीला
  • SEVERITY_LEVEL_CRITICAL_WARNING
    • उपयोगकर्ता को इस समस्या पर कार्रवाई करनी चाहिए, क्योंकि इस बारे में एक गंभीर चेतावनी जोखिम हो सकता है
    • रंग: लाल

SafetySourceData

SafetySourceData ऑब्जेक्ट में यूज़र इंटरफ़ेस (यूआई) एंट्री, चेतावनी वाले कार्ड, और इन्वैरिएंट.

  • वैकल्पिक SafetySourceStatus इंस्टेंस (यूज़र इंटरफ़ेस (यूआई) एंट्री)
  • SafetySourceIssue इंस्टेंस की सूची (चेतावनी कार्ड)
  • Bundle अतिरिक्त विकल्प (14 से शुरू)
  • इन्वैरिएंट:
    • SafetySourceIssue सूची में यूनीक समस्याएं होनी चाहिए आइडेंटिफ़ायर मौजूद हैं.
    • SafetySourceIssue इंस्टेंस की अहमियत इससे ज़्यादा नहीं होनी चाहिए SafetySourceStatus अगर कोई है (जब तक कि SafetySourceStatus है SEVERITY_LEVEL_UNSPECIFIED, इस मामले में SEVERITY_LEVEL_INFORMATION समस्याओं की अनुमति है).
    • एपीआई कॉन्फ़िगरेशन की वजह से लगाई गई अन्य ज़रूरी शर्तों को पूरा करना ज़रूरी है, उदाहरण के लिए, अगर सोर्स सिर्फ़ समस्या वाला है, तो उसमें SafetySourceStatus इंस्टेंस.

SafetySourceStatus

  • CharSequence टाइटल डालना ज़रूरी है
  • CharSequence की खास जानकारी ज़रूरी है
  • गंभीरता का ज़रूरी लेवल
  • ज़रूरी नहीं PendingIntent इंस्टेंस को सही पेज पर रीडायरेक्ट करें (डिफ़ॉल्ट रूप से intentAction का इस्तेमाल होता है (अगर कोई है)
  • वैकल्पिक IconAction (एंट्री पर साइड आइकॉन के तौर पर दिखाया गया है) से मिलकर बना:
    • आइकॉन का ज़रूरी टाइप. यह इनमें से किसी एक टाइप का होना चाहिए:
      • ICON_TYPE_GEAR: यूज़र इंटरफ़ेस (यूआई) एंट्री के बगल में गियर के तौर पर दिखाया जाता है
      • ICON_TYPE_INFO: यूज़र इंटरफ़ेस (यूआई) एंट्री के बगल में, जानकारी देने वाले आइकॉन के तौर पर दिखाया जाता है
    • ज़रूरी है PendingIntent उपयोगकर्ता को किसी अन्य पेज पर रीडायरेक्ट करने के लिए
  • वैकल्पिक बूलियन enabled वैल्यू, जो यूज़र इंटरफ़ेस (यूआई) एंट्री को इस तौर पर मार्क करने की अनुमति देती है बंद है, इसलिए इस पर क्लिक नहीं किया जा सकता (डिफ़ॉल्ट रूप से यह true पर सेट है)
  • इन्वैरिएंट:
    • PendingIntent इंस्टेंस को एक Activity इंस्टेंस खोलना चाहिए.
    • अगर एंट्री बंद है, तो उसे SEVERITY_LEVEL_UNSPECIFIED.
    • एपीआई कॉन्फ़िगरेशन की मदद से लगाई गई अन्य ज़रूरी शर्तें.

SafetySourceIssue

  • ज़रूरी यूनीक String आइडेंटिफ़ायर
  • CharSequence टाइटल डालना ज़रूरी है
  • वैकल्पिक CharSequence सबटाइटल
  • CharSequence की खास जानकारी ज़रूरी है
  • गंभीरता का ज़रूरी लेवल
  • समस्या की वैकल्पिक कैटगरी, जो इनमें से एक होनी चाहिए:
    • ISSUE_CATEGORY_DEVICE: इस समस्या का असर उपयोगकर्ता के डिवाइस पर पड़ता है.
    • ISSUE_CATEGORY_ACCOUNT: समस्या का असर उपयोगकर्ता के खातों पर पड़ता है.
    • ISSUE_CATEGORY_GENERAL: इस समस्या से उपयोगकर्ता की सामान्य सुरक्षा पर असर पड़ता है. यह डिफ़ॉल्ट विकल्प है.
    • ISSUE_CATEGORY_DATA (Android 14 और इसके बाद के वर्शन वाले डिवाइसों पर): इस समस्या का असर उपयोगकर्ता के डेटा पर पड़ता है.
    • ISSUE_CATEGORY_PASSWORDS (Android से शुरू होता है 14): इस समस्या का असर उपयोगकर्ता की पासवर्ड.
    • ISSUE_CATEGORY_PERSONAL_SAFETY (Android से शुरू 14): समस्या का असर उपयोगकर्ता की निजी प्रोफ़ाइल पर पड़ता है सुरक्षा.
  • इस समस्या को हल करने के लिए, उपयोगकर्ता जिन Action एलिमेंट का इस्तेमाल कर सकते हैं उनकी सूची Action इंस्टेंस, इसमें शामिल है:
    • ज़रूरी यूनीक String आइडेंटिफ़ायर
    • ज़रूरी CharSequence लेबल
    • ज़रूरी है PendingIntent उपयोगकर्ता को किसी अन्य पेज पर रीडायरेक्ट करने या सीधे सुरक्षा केंद्र की स्क्रीन पर
    • यह समस्या सीधे तौर पर ठीक की जा सकती है या नहीं, यह बताने के लिए बूलियन ज़रूरी नहीं है SafetyCenter स्क्रीन (डिफ़ॉल्ट रूप से यह false पर सेट होती है)
    • उपयोगकर्ता को दिखाया जाने के लिए, CharSequence का सफलता का मैसेज (ज़रूरी नहीं) जब समस्या सीधे सुरक्षा केंद्र से हल हो जाती है स्क्रीन
  • ज़रूरी नहीं PendingIntent इसे तब कॉल किया जाता है जब उपयोगकर्ता समस्या को खारिज कर देता है (डिफ़ॉल्ट रूप से यह कुछ भी नहीं होता कॉल किया गया)
  • String समस्या के टाइप के लिए आइडेंटिफ़ायर ज़रूरी है; यह समस्या से मिलता-जुलता है आइडेंटिफ़ायर, लेकिन यूनीक होना ज़रूरी नहीं है. इसका इस्तेमाल लॉग करने के लिए किया जाता है
  • डिडुप्लीकेशन आईडी के लिए वैकल्पिक String, इससे उसे पोस्ट किया जा सकता है SafetySourceIssue अलग-अलग सोर्स से लिया गया है और इसे इसमें सिर्फ़ एक बार दिखाया गया है यूज़र इंटरफ़ेस (यूआई) की इमेज, जिसमें यह मान लिया गया है कि दोनों डिवाइस में deduplicationGroup (Android का नया वर्शन) पहले से मौजूद है 14). अगर इसके बारे में नहीं बताया गया है, तो यह समस्या कभी नहीं होगी डुप्लीकेट कॉपी हटाई गई
  • एट्रिब्यूशन टाइटल के लिए CharSequence ज़रूरी नहीं है. यह ऐसा टेक्स्ट है जो दिखता है जहां से चेतावनी वाला कार्ड जनरेट हुआ (Android का यह वर्शन 14). अगर बताया नहीं गया है, तो SafetySourcesGroup
  • समस्या पर कार्रवाई करने की वैकल्पिक सुविधा (Android 14 से), जो इनमें से एक होना चाहिए:
    • ISSUE_ACTIONABILITY_MANUAL: उपयोगकर्ता को इस समस्या को हल करना होगा मैन्युअल रूप से. यह डिफ़ॉल्ट विकल्प है.
    • ISSUE_ACTIONABILITY_TIP: यह समस्या सिर्फ़ एक सलाह है. शायद ऐसा करने की ज़रूरत न पड़े उपयोगकर्ता के किसी भी इनपुट के लिए.
    • ISSUE_ACTIONABILITY_AUTOMATIC: इस समस्या पर पहले ही कार्रवाई की जा चुकी है ऐसा हो सकता है कि इसके लिए उपयोगकर्ता के इनपुट की ज़रूरत न पड़े.
  • वैकल्पिक सूचना व्यवहार (Android शुरू होने पर) 14), जो इनमें से एक होना चाहिए:
    • NOTIFICATION_BEHAVIOR_UNSPECIFIED: सुरक्षा केंद्र यह तय करेगा कि चेतावनी कार्ड के लिए सूचना देना ज़रूरी है. यह डिफ़ॉल्ट विकल्प है.
    • NOTIFICATION_BEHAVIOR_NEVER: कोई सूचना पोस्ट नहीं की गई है.
    • NOTIFICATION_BEHAVIOR_DELAYED: कुछ समय के लिए सूचना पोस्ट की गई है को पहली बार रिपोर्ट किए जाने के बाद.
    • NOTIFICATION_BEHAVIOR_IMMEDIATELY: एक सूचना पोस्ट करते ही किसी समस्या की शिकायत की जाती है.
  • चेतावनी कार्ड के साथ पसंद के मुताबिक सूचना दिखाने के लिए, Notification को शामिल करना ज़रूरी नहीं है (Android 14 से). अगर इसके बारे में नहीं बताया गया है, तो Notification को चेतावनी वाले कार्ड से लिया गया है. इससे बना:
    • CharSequence टाइटल डालना ज़रूरी है
    • CharSequence की खास जानकारी ज़रूरी है
    • उन Action एलिमेंट की सूची जिन्हें उपयोगकर्ता इस सूचना के लिए इस्तेमाल कर सकता है
  • इन्वैरिएंट:
    • Action इंस्टेंस की सूची में, यूनीक कार्रवाइयां शामिल होनी चाहिए आइडेंटिफ़ायर
    • Action इंस्टेंस की सूची में एक या दो Action होने चाहिए एलिमेंट. अगर कार्रवाई करने की योग्यता ISSUE_ACTIONABILITY_MANUAL नहीं है, तो Action शून्य होने की अनुमति है.
    • Onखारिज PendingIntent को Activity इंस्टेंस नहीं खोलना चाहिए
    • एपीआई कॉन्फ़िगरेशन की मदद से लगाई गई अन्य ज़रूरी शर्तें

सुरक्षा केंद्र को कुछ खास गतिविधियों का डेटा दिया जाता है. इसलिए, यह ज़रूरी है कि बताएं कि सोर्स ने किस वजह से SafetySourceData को SafetyEvent इंस्टेंस.

SafetyEvent

  • ज़रूरी है. यह इनमें से एक होना चाहिए:
    • SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED: सोर्स की स्थिति में बदल दिया गया है.
    • SAFETY_EVENT_TYPE_REFRESH_REQUESTED: रीफ़्रेश/फिर से स्कैन करने पर जवाब दिया जा रहा है सुरक्षा केंद्र से मिला सिग्नल; इसके बजाय इसका इस्तेमाल करें सुरक्षा केंद्र के लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED रीफ़्रेश/फिर से स्कैन करने के अनुरोध को ट्रैक कर सकती है.
    • SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED: हमने समाधान कर लिया है सुरक्षा केंद्र की स्क्रीन से सीधे SafetySourceIssue.Action; इस्तेमाल सुरक्षा के लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED के बजाय यह केंद्र में जाकर, ठीक की जा रही SafetySourceIssue.Action की समस्या को ट्रैक करें.
    • SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED: हमने समस्या को हल करने की कोशिश की सीधे सुरक्षा केंद्र की स्क्रीन से SafetySourceIssue.Action, लेकिन पुष्टि नहीं की जा सकी; इसके बजाय इसका इस्तेमाल करें सुरक्षा केंद्र के इस्तेमाल के लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED ट्रैक SafetySourceIssue.Action विफल रहा.
    • SAFETY_EVENT_TYPE_DEVICE_LOCALE_CHANGED: डिवाइस की भाषा में बदलाव किया गया है, इसलिए हम दिए गए डेटा का टेक्स्ट अपडेट कर रहे हैं; यह इसके लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED का इस्तेमाल करने की अनुमति है.
    • SAFETY_EVENT_TYPE_DEVICE_REBOOTED: हम यह डेटा, हो सकता है कि आपका सुरक्षा केंद्र का डेटा पूरी तरह सुरक्षित हो फिर से चालू करता है; SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED का इस्तेमाल किया जा सकता है इसके लिए.
  • रीफ़्रेश ब्रॉडकास्ट आईडी के लिए ज़रूरी String आइडेंटिफ़ायर.
  • SafetySourceIssue इंस्टेंस के लिए, वैकल्पिक String आइडेंटिफ़ायर समाधान किया गया.
  • SafetySourceIssue.Action इंस्टेंस के लिए, वैकल्पिक String आइडेंटिफ़ायर समस्या को हल किया जा रहा है.
  • इन्वैरिएंट:
    • रीफ़्रेश ब्रॉडकास्ट आईडी देना ज़रूरी है, अगर टाइप SAFETY_EVENT_TYPE_REFRESH_REQUESTED
    • अगर समस्या का टाइप, दोनों में से कोई एक है, तो समस्या और ऐक्शन आईडी देना ज़रूरी है SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED या SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED

नीचे दिए गए उदाहरण में बताया गया है कि कोई सोर्स, सुरक्षा केंद्र को किस तरह डेटा उपलब्ध करा सकता है. उदाहरण के लिए, यह एक चेतावनी कार्ड वाली एंट्री दे रहा है:

PendingIntent redirectToMyScreen =
    PendingIntent.getActivity(
        context, requestCode, redirectToMyScreenIntent, PendingIntent.FLAG_IMMUTABLE);
SafetySourceData safetySourceData =
    new SafetySourceData.Builder()
        .setStatus(
            new SafetySourceStatus.Builder(
                    "title", "summary", SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION)
                .setPendingIntent(redirectToMyScreen)
                .build())
        .addIssue(
            new SafetySourceIssue.Builder(
                    "MyIssueId",
                    "title",
                    "summary",
                    SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION,
                    "MyIssueTypeId")
                .setSubtitle("subtitle")
                .setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE)
                .addAction(
                    new SafetySourceIssue.Action.Builder(
                            "MyIssueActionId", "label", redirectToMyScreen)
                        .build())
                .build())
        .build();
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
safetyCenterManager.setSafetySourceData("MySourceId", safetySourceData, safetyEvent);

दिया गया पिछला डेटा पाएं

सुरक्षा केंद्र में, अपने मालिकाना हक वाले सोर्स से मिला पिछला डेटा देखा जा सकता है है. इसका इस्तेमाल, अपने यूज़र इंटरफ़ेस (यूआई) में कोई चीज़ दिखाने के लिए किया जा सकता है. इससे यह जांच की जा सकेगी कि डेटा कोई महंगा ऑपरेशन करने से पहले अपडेट करना ज़रूरी होता है या वही SafetySourceData इंस्टेंस, जो कुछ बदलावों के साथ या सुरक्षा केंद्र में नया SafetyEvent इंस्टेंस. यह टेस्ट करने में भी काम आता है.

सुरक्षा केंद्र को दिया गया पिछला डेटा पाने के लिए, इस कोड का इस्तेमाल करें:

SafetySourceData lastDataProvided = safetyCenterManager.getSafetySourceData("MySourceId");

किसी गड़बड़ी की शिकायत करें

अगर SafetySourceData का डेटा इकट्ठा नहीं हो पा रहा है, तो इस गड़बड़ी की शिकायत Safety ऐप्लिकेशन से की जा सकती है बीच में, जो एंट्री को स्लेटी रंग में बदल देता है, कैश मेमोरी में सेव किए गए डेटा को मिटाता है. साथ ही, सेटिंग की जांच नहीं की जा सकी जैसा कुछ मैसेज. किसी गड़बड़ी की शिकायत तब भी की जा सकती है, जब SafetySourceIssue.Action का इंस्टेंस हल नहीं हो पाता, जिस स्थिति में कैश मेमोरी में सेव किया गया डेटा नहीं मिटाया जाता है और यूज़र इंटरफ़ेस (यूआई) में की गई एंट्री में कोई बदलाव नहीं होता है; लेकिन एक मैसेज है उपयोगकर्ता को बताया गया कि कोई गड़बड़ी हुई है.

आप SafetySourceErrorDetails का इस्तेमाल करके गड़बड़ी का मैसेज दे सकते हैं, जो पहले में से:

  • SafetySourceErrorDetails: SafetyEvent इंस्टेंस ज़रूरी है:
// An error has occurred in the background, need to clear the Safety Center data to avoid showing data that may not be valid anymore
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
SafetySourceErrorDetails safetySourceErrorDetails = new SafetySourceErrorDetails(safetyEvent);
safetyCenterManager.reportSafetySourceError("MySourceId", safetySourceErrorDetails);

रीफ़्रेश या दोबारा स्कैन करने के अनुरोध का जवाब दें

नया डेटा उपलब्ध कराने के लिए, सुरक्षा केंद्र से सिग्नल लिया जा सकता है. किसी रीफ़्रेश या दोबारा स्कैन करने का अनुरोध यह पक्का करता है कि उपयोगकर्ता सुरक्षा केंद्र खोलकर और जब वे 'स्कैन करें' बटन पर टैप करेंगे.

ऐसा निम्न कार्रवाई के साथ एक प्रसारण प्राप्त करके किया जाता है:

  • ACTION_REFRESH_SAFETY_SOURCES
    • स्ट्रिंग का मान: android.safetycenter.action.REFRESH_SAFETY_SOURCES
    • तब ट्रिगर होता है, जब सुरक्षा केंद्र किसी ऐप्लिकेशन का सुरक्षा का सोर्स
    • सुरक्षित इंटेंट, जिसे सिर्फ़ सिस्टम भेज सकता है
    • कॉन्फ़िगरेशन फ़ाइल में सभी सुरक्षा स्रोतों को, साफ़ तौर पर मैसेज के तौर पर भेजा गया हो इंटेंट और SEND_SAFETY_CENTER_UPDATE अनुमति की ज़रूरत होती है

इस ब्रॉडकास्ट के तहत ये अतिरिक्त सुविधाएं दी गई हैं:

  • EXTRA_REFRESH_SAFETY_SOURCE_IDS
    • स्ट्रिंग का मान: android.safetycenter.extra.REFRESH_SAFETY_SOURCE_IDS
    • स्ट्रिंग कलेक्शन का टाइप (String[]), ऐसे सोर्स आईडी दिखाता है जिन्हें रीफ़्रेश करना है दिया गया ऐप्लिकेशन
  • EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE

    • स्ट्रिंग मान: android.safetycenter.extra.REFRESH_SAFETY_SOURCES_REQUEST_TYPE
    • पूर्णांक टाइप, अनुरोध के @IntDef टाइप के बारे में बताता है
    • इनमें से एक होना चाहिए:
      • EXTRA_REFRESH_REQUEST_TYPE_GET_DATA: सोर्स से इस आइटम का अनुरोध करता है तेज़ी से डेटा उपलब्ध कराता है. आम तौर पर, जब लोग पेज खोलते हैं
      • EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA: स्रोत का अनुरोध करता है जितना हो सके उतना नया डेटा उपलब्ध कराने के लिए. आम तौर पर, जब उपयोगकर्ता दोबारा स्कैन बटन दबाता है
  • EXTRA_REFRESH_SAFETY_SOURCES_BROADCAST_ID

    • स्ट्रिंग मान: android.safetycenter.extra.REFRESH_SAFETY_SOURCES_BROADCAST_ID
    • स्ट्रिंग टाइप, अनुरोध किए गए रीफ़्रेश के लिए यूनीक आइडेंटिफ़ायर दिखाता है

सुरक्षा केंद्र से सिग्नल पाने के लिए, BroadcastReceiver इंस्टेंस. ब्रॉडकास्ट को खास BroadcastOptions के साथ भेजा जाता है. इससे रिसीवर को लिंक करें.

रीफ़्रेश करने के अनुरोध का BroadcastReceiver जवाब देता है:

public final class SafetySourceReceiver extends BroadcastReceiver {
  // All the safety sources owned by this application.
  private static final String[] ALL_SAFETY_SOURCES = new String[] {"MySourceId1", "…"};
  @Override
  public void onReceive(Context context, Intent intent) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
      // Must be on T or above to interact with Safety Center.
      return;
    }
    String action = intent.getAction();
    if (!SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES.equals(action)) {
      return;
    }
    String refreshBroadcastId =
        intent.getStringExtra(SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCES_BROADCAST_ID);
    if (refreshBroadcastId == null) {
      // Should always be provided.
      return;
    }
    String[] sourceIds =
        intent.getStringArrayExtra(SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS);
    if (sourceIds == null) {
      sourceIds = ALL_SAFETY_SOURCES;
    }
    int requestType =
        intent.getIntExtra(
            SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCES_REQUEST_TYPE,
            SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA);
    SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
    if (safetyCenterManager == null) {
      // Should not be null on T.
      return;
    }
    if (!safetyCenterManager.isSafetyCenterEnabled()) {
      // Preferably, no Safety Source code should be run if Safety Center is disabled.
      return;
    }
    SafetyEvent refreshSafetyEvent =
        new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_REFRESH_REQUESTED)
            .setRefreshBroadcastId(refreshBroadcastId)
            .build();
    for (String sourceId : sourceIds) {
      SafetySourceData safetySourceData = getSafetySourceDataFor(sourceId, requestType);
      // Set the data (or report an error with reportSafetySourceError, if something went wrong).
      safetyCenterManager.setSafetySourceData(sourceId, safetySourceData, refreshSafetyEvent);
    }
  }
  private SafetySourceData getSafetySourceDataFor(String sourceId, int requestType) {
    switch (requestType) {
      case SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_GET_DATA:
        return getRefreshSafetySourceDataFor(sourceId);
      case SafetyCenterManager.EXTRA_REFRESH_REQUEST_TYPE_FETCH_FRESH_DATA:
        return getRescanSafetySourceDataFor(sourceId);
      default:
    }
    return getRefreshSafetySourceDataFor(sourceId);
  }
  // Data to provide when the user opens the page or on specific events.
  private SafetySourceData getRefreshSafetySourceDataFor(String sourceId) {
    // Get data for the source, if it's a fast operation it could potentially be executed in the
    // receiver directly.
    // Otherwise, it must start some kind of foreground service or expedited job.
    return null;
  }
  // Data to provide when the user pressed the rescan button.
  private SafetySourceData getRescanSafetySourceDataFor(String sourceId) {
    // Could be implemented the same way as getRefreshSafetySourceDataFor, depending on the source's
    // need.
    // Otherwise, could potentially perform a longer task.
    // In which case, it must start some kind of foreground service or expedited job.
    return null;
  }
}

ऊपर दिए गए उदाहरण में BroadcastReceiver के समान इंस्टेंस का एलान AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="…">
    <application>
    <!-- … -->
        <receiver android:name=".SafetySourceReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="android.safetycenter.action.REFRESH_SAFETY_SOURCES"/>
            </intent-filter>
        </receiver>
    <!-- … -->
    </application>
</manifest>

आम तौर पर, सुरक्षा केंद्र का सोर्स को इस तरह से लागू किया जाता है कि SafetyCenterManager. सिस्टम की परफ़ॉर्मेंस से जुड़ी वजहों से, हम सिर्फ़ दोबारा स्कैन सिग्नल पर जवाब देने का सुझाव दें (जब उपयोगकर्ता स्कैन पर टैप करे बटन) दिखाई देता है, न कि जब उपयोगकर्ता सुरक्षा केंद्र खोलता है. अगर यह सुविधा कॉन्फ़िगरेशन फ़ाइल में refreshOnPageOpenAllowed="true" फ़ील्ड को भरना ज़रूरी है का सेट होना चाहिए, ताकि इन मामलों में डिलीवर किया जाने वाला ब्रॉडकास्ट मिल सके.

सुरक्षा केंद्र के चालू या बंद होने पर जवाब देना

इसका इस्तेमाल करके, सुरक्षा केंद्र के चालू या बंद होने पर जवाब दिया जा सकता है इंटेंट कार्रवाई:

  • ACTION_SAFETY_CENTER_ENABLED_CHANGED
    • स्ट्रिंग मान: android.safetycenter.action.SAFETY_CENTER_ENABLED_CHANGED
    • तब ट्रिगर होता है, जब सुरक्षा केंद्र डिवाइस चल रहा है
    • बूट पर कॉल नहीं किया गया (इसका उपयोग करें ACTION_BOOT_COMPLETED उसके लिए)
    • सुरक्षित इंटेंट, जिसे सिर्फ़ सिस्टम भेज सकता है
    • कॉन्फ़िगरेशन फ़ाइल में सभी सुरक्षा स्रोतों को, साफ़ तौर पर मैसेज के तौर पर भेजा गया हो इंटेंट, SEND_SAFETY_CENTER_UPDATE अनुमति की ज़रूरत है
    • इंप्लिसिट इंटेंट के तौर पर भेजा गया है, जिसके लिए READ_SAFETY_CENTER_STATUS की ज़रूरत होती है अनुमति

यह इंटेंट कार्रवाई, इससे जुड़ी सुविधाओं को चालू या बंद करने में मदद करती है डिवाइस पर सुरक्षा केंद्र.

समाधान की कार्रवाइयां लागू करें

रिज़ॉल्व करने वाली कार्रवाई, एक ऐसा SafetySourceIssue.Action इंस्टेंस है जिसे उपयोगकर्ता, सुरक्षा केंद्र की स्क्रीन से समाधान करें. जब उपयोगकर्ता किसी ऐक्शन बटन पर टैप करता है और SafetySourceIssue.Action पर PendingIntent इंस्टेंस सुरक्षा सोर्स ट्रिगर होता है, जिससे बैकग्राउंड में हो रही समस्या ठीक हो जाती है और ऐसा होने पर, सुरक्षा केंद्र को इसकी सूचना दी जाती है.

इन कार्रवाइयों को ठीक करने के लिए, सुरक्षा केंद्र का सोर्स किसी सेवा का इस्तेमाल कर सकता है, अगर कार्रवाई में कुछ समय लग सकता है (PendingIntent.getService) या ब्रॉडकास्ट रिसीवर (PendingIntent.getBroadcast).

सुरक्षा केंद्र को हल की जाने वाली किसी समस्या की जानकारी भेजने के लिए, इस कोड का इस्तेमाल करें:

Intent resolveIssueBroadcastIntent =
    new Intent("my.package.name.MY_RESOLVING_ACTION").setClass(ResolveActionReceiver.class);
PendingIntent resolveIssue =
    PendingIntent.getBroadcast(
        context, requestCode, resolveIssueBroadcastIntent, PendingIntent.FLAG_IMMUTABLE);
SafetySourceData safetySourceData =
    new SafetySourceData.Builder()
        .setStatus(
            new SafetySourceStatus.Builder(
                    "title", "summary", SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION)
                .setPendingIntent(redirectToMyScreen)
                .build())
        .addIssue(
            new SafetySourceIssue.Builder(
                    "MyIssueId",
                    "title",
                    "summary",
                    SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION,
                    "MyIssueTypeId")
                .setIssueCategory(SafetySourceIssue.ISSUE_CATEGORY_DEVICE)
                .addAction(
                    new SafetySourceIssue.Action.Builder(
                            "MyIssueActionId", "label", resolveIssue)
                        .setWillResolve(true)
                        .build())
                .build())
        .build();
SafetyEvent safetyEvent = new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
safetyCenterManager.setSafetySourceData("MySourceId", safetySourceData, safetyEvent);

BroadcastReceiver कार्रवाई को हल करता है:

public final class ResolveActionReceiver extends BroadcastReceiver {
  private static final String MY_RESOLVING_ACTION = "my.package.name.MY_RESOLVING_ACTION";
  @Override
  public void onReceive(Context context, Intent intent) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
      // Must be on T or above to interact with Safety Center.
      return;
    }
    String action = intent.getAction();
    if (!MY_RESOLVING_ACTION.equals(action)) {
      return;
    }
    SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class);
    if (safetyCenterManager == null) {
      // Should not be null on T.
      return;
    }
    if (!safetyCenterManager.isSafetyCenterEnabled()) {
      // Preferably, no Safety Source code should be run if Safety Center is disabled.
      return;
    }
    resolveTheIssue();
    SafetyEvent resolveActionSafetyEvent =
        new SafetyEvent.Builder(SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED)
            .setSafetySourceIssueId("MyIssueId")
            .setSafetySourceIssueActionId("MyIssueActionId")
            .build();
    SafetySourceData dataWithoutTheIssue = …;
    // Set the data (or report an error with reportSafetySourceError and
    // SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED, if something went wrong).
    safetyCenterManager.setSafetySourceData("MySourceId", dataWithoutTheIssue, resolveActionSafetyEvent);
  }

  private void resolveTheIssue() {
    // Resolves the issue for the user. Given this a BroadcastReceiver, this should be a fast action.
    // Otherwise, a foreground service and PendingIntent.getService should be used instead (or a job
    // could be scheduled here, too).
  }
}

ऊपर दिए गए उदाहरण में BroadcastReceiver के समान इंस्टेंस का एलान AndroidManifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="…">
    <application>
    <!-- … -->
        <receiver android:name=".ResolveActionReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="my.package.name.MY_RESOLVING_ACTION"/>
            </intent-filter>
        </receiver>
    <!-- … -->
    </application>
</manifest>

समस्या खारिज होने का जवाब दें

एक PendingIntent इंस्टेंस तय किया जा सकता है. यह तब ट्रिगर होगा, जब SafetySourceIssue इंस्टेंस खारिज कर दिया गया है. सुरक्षा केंद्र इन समस्याओं को हल करता है खारिज करना:

  • अगर कोई सोर्स किसी समस्या को पुश करता है, तो उपयोगकर्ता सुरक्षा केंद्र पर उसे खारिज कर सकता है 'खारिज करें' बटन (चेतावनी कार्ड पर मौजूद X बटन) पर टैप करें.
  • जब कोई उपयोगकर्ता किसी समस्या को खारिज करता है और समस्या बनी रहती है, तो यह नहीं दिखेगी डालें.
  • डिवाइस को फिर से चालू करने के दौरान, डिस्क को बार-बार खारिज करने की सुविधा मौजूद रहती है.
  • अगर सुरक्षा केंद्र का सोर्स कोई समस्या देना बंद कर देता है और फिर बाद में, यह समस्या दोबारा सामने आती है. यह अनुमति देने के लिए ऐसी स्थितियां जिनमें कोई उपयोगकर्ता चेतावनी देखने के बाद उसे खारिज करने के बाद ऐसी कार्रवाई करता है को कम कर देना चाहिए, लेकिन उपयोगकर्ता फिर से कुछ ऐसा करता है के कारण इस तरह की समस्या होती है. ऐसा होने पर, चेतावनी वाला कार्ड फिर से दिखने लगेगा.
  • हर 180 दिन में पीले और लाल रंग के चेतावनी कार्ड दिखते हैं. हालांकि, अगर उपयोगकर्ता ने ऐसा कुछ किया है, तो उसे कई बार खारिज किया गया.

सोर्स को कुछ अन्य व्यवहार की ज़रूरत तब तक नहीं होनी चाहिए, जब तक:

  • सोर्स इस तरीके को अलग तरीके से लागू करने की कोशिश करता है. उदाहरण के लिए, समस्या को फिर से सामने लाएँ.
  • सोर्स, इसे कॉलबैक के तौर पर इस्तेमाल करने की कोशिश करता है. उदाहरण के लिए, जानकारी.

एक से ज़्यादा उपयोगकर्ताओं/प्रोफ़ाइलों के लिए डेटा दें

SafetyCenterManager एपीआई का इस्तेमाल, उपयोगकर्ताओं और प्रोफ़ाइलों में किया जा सकता है. ज़्यादा के लिए एक से ज़्यादा उपयोगकर्ताओं के बारे में जानकारी देने वाले सिस्टम को बनाना ऐप्लिकेशन. Context SafetyCenterManager देने वाला ऑब्जेक्ट, UserHandle से जुड़ा है इंस्टेंस की वजह से सेट किया गया SafetyCenterManager इंस्टेंस, उस UserHandle इंस्टेंस के लिए सुरक्षा केंद्र. डिफ़ॉल्ट रूप से, Context चल रहे उपयोगकर्ता से संबद्ध है, लेकिन किसी उपयोगकर्ता के लिए एक इंस्टेंस बनाया जा सकता है अगर ऐप्लिकेशन के पास INTERACT_ACROSS_USERS और INTERACT_ACROSS_USERS_FULL अनुमतियां. इस उदाहरण में, कॉल करने का तरीका दिखाया गया है सभी उपयोगकर्ताओं/प्रोफ़ाइलों पर:

Context userContext = context.createContextAsUser(userHandle, 0);
SafetyCenterManager userSafetyCenterManager = userContext.getSystemService(SafetyCenterManager.class);
if (userSafetyCenterManager == null) {
  // Should not be null on T.
  return;
}
// Calls to userSafetyCenterManager will provide data for the given userHandle

डिवाइस पर हर उपयोगकर्ता के पास मैनेज की जा रही एक से ज़्यादा प्रोफ़ाइलें हो सकती हैं. सुरक्षा केंद्र हर उपयोगकर्ता को अलग डेटा देता है, लेकिन मैनेज किए जा रहे सभी खातों के डेटा को मर्ज करता है किसी उपयोगकर्ता से जुड़ी प्रोफ़ाइलें.

जब कॉन्फ़िगरेशन फ़ाइल में सोर्स के लिए profile="all_profiles" सेट होता है, तो ये चीज़ें होती हैं:

  • उपयोगकर्ता (प्रोफ़ाइल पैरंट) और उससे जुड़ी सभी चीज़ों के लिए एक यूज़र इंटरफ़ेस (यूआई) है. मैनेज की जा रही प्रोफ़ाइलें (जो titleForWork इंस्टेंस का इस्तेमाल करती हैं).
  • रीफ़्रेश या दोबारा स्कैन करने का सिग्नल, प्रोफ़ाइल पैरंट और उन सभी मैनेज की जा रही प्रोफ़ाइल. हर डिवाइस के लिए, डिवाइस से जुड़ा रिसीवर शुरू हो गया है प्रोफ़ाइल है और इससे संबंधित डेटा सीधे SafetyCenterManager को तब तक क्रॉस-प्रोफ़ाइल कॉल करने की ज़रूरत नहीं है, जब तक रिसीवर या ऐप्लिकेशन है singleUser.

  • सोर्स से उपयोगकर्ता और इसके मैनेज किए जा रहे सभी कामों के लिए डेटा उपलब्ध कराना चाहिए प्रोफ़ाइल. हर यूज़र इंटरफ़ेस (यूआई) एंट्री के लिए डेटा, अलग-अलग हो सकता है. यह प्रोफ़ाइल.

टेस्ट करना

तो आप ShadowSafetyCenterManager को ऐक्सेस करके, इसे Robolectric टेस्ट में इस्तेमाल कर सकते हैं.

private static final String MY_SOURCE_ID = "MySourceId";

private final MyClass myClass = …;
private final SafetyCenterManager safetyCenterManager = getApplicationContext().getSystemService(SafetyCenterManager.class);

@Test
public void whenRefreshingData_providesDataToSafetyCenterForMySourceId() {
    shadowOf(safetyCenterManager).setSafetyCenterEnabled(true);
    setupDataForMyClass(…);

    myClass.refreshData();

    SafetySourceData expectedSafetySourceData = …;
    assertThat(safetyCenterManager.getSafetySourceData(MY_SOURCE_ID)).isEqualTo(expectedSafetySourceData);
    SafetyEvent expectedSafetyEvent = …;
    assertThat(shadowOf(safetyCenterManager).getLastSafetyEvent(MY_SOURCE_ID)).isEqualTo(expectedSafetyEvent);
}

एंड-टू-एंड (E2E) की और भी जांच लिखी जा सकती हैं, लेकिन यह इस दायरे से बाहर है पढ़ें. इन E2E टेस्ट को लिखने के बारे में ज़्यादा जानकारी के लिए, सीटीएस टेस्ट देखें (CtsSafetyCenterTestCases)

टेस्ट और इंटरनल एपीआई

इंटरनल एपीआई और टेस्ट एपीआई, अंदरूनी इस्तेमाल के लिए हैं. इसलिए, इनकी जानकारी इस गाइड में दी गई ज़्यादा जानकारी देखें. हालांकि, आने वाले समय में हम कुछ इंटरनल एपीआई को बढ़ा सकते हैं ताकि OEM को अपना यूआई बनाने की अनुमति मिल सके. इसके बाद, हम इस गाइड को अपडेट करके, उन्हें इस्तेमाल करने के तरीकों के बारे में बताया गया है.

अनुमतियां

  • MANAGE_SAFETY_CENTER
    • internal|installer|role
    • आंतरिक सुरक्षा केंद्र API (एपीआई) के लिए इस्तेमाल किया जाता है
    • सिर्फ़ PermissionController और शेल को अनुमति दी गई

सेटिंग ऐप्लिकेशन

सुरक्षा केंद्र पर रीडायरेक्ट करना

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

सुरक्षा केंद्र के चालू होने पर:

  • लेगसी निजता एंट्री छिपी हुई है कोड
  • लेगसी सुरक्षा की एंट्री छिपा दी गई है कोड
  • नई Security & निजता की एंट्री के लिए, कोड जोड़ा गया है
  • नई Security & निजता वाली एंट्री, सुरक्षा केंद्र के कोड पर रीडायरेक्ट करती है
  • android.settings.PRIVACY_SETTINGS और android.settings.SECURITY_SETTINGS इंटेंट ऐक्शन को सुरक्षा केंद्र (कोड: सिक्योरिटी, निजता)

बेहतर सुरक्षा और निजता पेज

सेटिंग ऐप्लिकेशन में, सुरक्षा से जुड़ी अन्य सेटिंग में, अतिरिक्त सेटिंग शामिल होती हैं और निजता सेटिंग से जुड़ी अन्य सेटिंग के टाइटल, सुरक्षा केंद्र में उपलब्ध हैं:

सुरक्षा के सोर्स

सुरक्षा केंद्र, सुरक्षा स्रोतों के खास सेट के साथ इंटिग्रेट किया जाता है. ये संसाधन, सेटिंग ऐप्लिकेशन:

  • लॉक स्क्रीन पर सुरक्षा से जुड़ा सोर्स, इस बात की पुष्टि करता है कि लॉक स्क्रीन को पासकोड (या अन्य सुरक्षा) का इस्तेमाल करें, ताकि यह पक्का किया जा सके कि उपयोगकर्ता की निजी जानकारी को बाहरी ऐक्सेस से सुरक्षित रखा जाता है.
  • बायोमेट्रिक्स सुरक्षा स्रोत (डिफ़ॉल्ट रूप से छिपा हुआ) की मदद से, फ़िंगरप्रिंट या फ़ेस सेंसर.

सुरक्षा केंद्र के इन सोर्स के सोर्स कोड को Android की मदद से ऐक्सेस किया जा सकता है कोड खोजें. अगर सेटिंग ऐप्लिकेशन में बदलाव नहीं किया गया है (पैकेज नाम में बदलाव नहीं किए गए हैं, सोर्स कोड या ऐसा सोर्स कोड जो लॉक स्क्रीन और बायोमेट्रिक्स से जुड़ा हो, तो यह इंटिग्रेशन अलग तरीके से काम करेगा. या फिर, कुछ बदलाव जैसे, पैकेज बदलने के लिए कॉन्फ़िगरेशन फ़ाइल को बदलना ज़रूरी हो सकता है सेटिंग ऐप्लिकेशन और सुरक्षा केंद्र से इंटिग्रेट किए गए सोर्स का नाम, इस तरह से साथ ही, इंटिग्रेशन भी होता है. ज़्यादा जानकारी के लिए, कॉन्फ़िगरेशन अपडेट करना फ़ाइल और इंटिग्रेशन सेटिंग का इस्तेमाल करें.

PendingIntent के बारे में जानकारी

अगर आप Android में सेटिंग ऐप्लिकेशन के सुरक्षा केंद्र के इंटिग्रेशन का इस्तेमाल करते हैं 14 या उसके बाद के वर्शन में बताई गई गड़बड़ी को ठीक कर दिया गया है. इस मामले में इस सेक्शन को पढ़ने की ज़रूरत नहीं है.

जब आप पक्का हो जाएं कि गड़बड़ी मौजूद नहीं है, तो एक्सएमएल बूलियन रिसॉर्स सेट करें सेटिंग ऐप्लिकेशन में कॉन्फ़िगरेशन मान config_isSafetyCenterLockScreenPendingIntentFixed से true सुरक्षा केंद्र में समाधान की जानकारी.

PendingIntent के समाधान

यह गड़बड़ी तब होती है, जब सेटिंग में यह तय करने के लिए कि Intent इंस्टेंस एक्स्ट्रा का इस्तेमाल किया जाता है फ़्रैगमेंट खोलें. क्योंकि Intent#equals, Intent इंस्टेंस नहीं लेता अतिरिक्त चीज़ों को ध्यान में रखते हुए, गियर मेन्यू आइकॉन के लिए PendingIntent इंस्टेंस और एंट्री को बराबर माना जाता है और उसी यूज़र इंटरफ़ेस (यूआई) पर नेविगेट करना होता है (भले ही वे के लिए डिज़ाइन किया गया है). इस समस्या को क्यूपीआर रिलीज़ में ठीक किया गया है: अनुरोध कोड के हिसाब से, PendingIntent इंस्टेंस को अलग-अलग करें. इसके अलावा, इसमें Intent#setId का इस्तेमाल करके अंतर किया जा सकता है.

सुरक्षा के अंदरूनी सोर्स

सुरक्षा केंद्र के कुछ स्रोत आंतरिक होते हैं और परमिशन कंट्रोलर मॉड्यूल के अंदर अनुमति कंट्रोलर सिस्टम ऐप्लिकेशन. ये सोर्स, सुरक्षा केंद्र के सामान्य सोर्स की तरह काम करते हैं. इन्हें कोई खास जानकारी नहीं मिलती इलाज. इन सोर्स का कोड, Android कोड के ज़रिए उपलब्ध है खोजें.

ये मुख्य तौर पर निजता से जुड़े सिग्नल होते हैं, जैसे:

  • सुलभता
  • इस्तेमाल न होने वाले ऐप्लिकेशन अपने-आप रद्द होने की सुविधा
  • जगह की जानकारी का ऐक्सेस
  • सूचना को सुनने की सुविधा
  • काम से जुड़ी नीति की जानकारी