सुरक्षा केंद्र के साथ बातचीत करें

सुरक्षा केंद्र पर पुनर्निर्देशित करें

कोई भी ऐप 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);

किसी विशिष्ट उपपृष्ठ पर पुनर्निर्देशित करें (एंड्रॉइड 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() API के लिए उपयोग किया जाता है (सुरक्षा केंद्र स्रोतों के लिए आवश्यक नहीं, उन्हें केवल SEND_SAFETY_CENTER_UPDATE अनुमति की आवश्यकता होती है)
    • सिस्टम ऐप्स द्वारा उपयोग किया जाता है जो जांच करते हैं कि सुरक्षा केंद्र सक्षम है या नहीं
    • केवल अनुमत सूचीबद्ध सिस्टम ऐप्स को ही प्रदान किया गया
  • SEND_SAFETY_CENTER_UPDATE
    • internal|privileged
    • सक्षम एपीआई और सुरक्षा स्रोत एपीआई के लिए उपयोग किया जाता है
    • केवल सुरक्षा स्रोतों द्वारा उपयोग किया जाता है
    • केवल अनुमत सूचीबद्ध सिस्टम ऐप्स को ही प्रदान किया गया

ये अनुमतियाँ विशेषाधिकार प्राप्त हैं और आप इन्हें केवल संबंधित फ़ाइल में जोड़कर ही प्राप्त कर सकते हैं, उदाहरण के लिए, सेटिंग्स ऐप के लिए com.android.settings.xml फ़ाइल और ऐप की AndroidManifest.xml फ़ाइल में। अनुमति मॉडल पर अधिक जानकारी के लिए protectionLevel देखें।

SafetyCenterManager प्राप्त करें

SafetyCenterManager एक @SystemApi क्लास है जिसे एंड्रॉइड 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 के साथ सुरक्षा केंद्र स्रोत डेटा सुरक्षा केंद्र को SafetySourceData ऑब्जेक्ट के साथ प्रदान किया जाता है, जो यूआई प्रविष्टि और मुद्दों की एक सूची (चेतावनी कार्ड) का प्रतिनिधित्व करता है। यूआई प्रविष्टि और चेतावनी कार्ड में SafetySourceData वर्ग में निर्दिष्ट विभिन्न गंभीरता स्तर हो सकते हैं:

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

SafetySourceData

SafetySourceData ऑब्जेक्ट एक UI प्रविष्टि, चेतावनी कार्ड और इनवेरिएंट से बना है।

  • वैकल्पिक 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 (एंड्रॉइड 14 से प्रारंभ): समस्या उपयोगकर्ता के डेटा को प्रभावित करती है।
    • ISSUE_CATEGORY_PASSWORDS (एंड्रॉइड 14 से प्रारंभ): समस्या उपयोगकर्ता के पासवर्ड को प्रभावित करती है।
    • ISSUE_CATEGORY_PERSONAL_SAFETY (एंड्रॉइड 14 से प्रारंभ): समस्या उपयोगकर्ता की व्यक्तिगत सुरक्षा को प्रभावित करती है।
  • Action तत्वों की सूची जो उपयोगकर्ता इस समस्या के लिए ले सकता है, प्रत्येक Action उदाहरण से बना है:
    • आवश्यक अद्वितीय String पहचानकर्ता
    • आवश्यक CharSequence लेबल
    • उपयोगकर्ता को किसी अन्य पृष्ठ पर पुनर्निर्देशित करने या सुरक्षा केंद्र स्क्रीन से सीधे कार्रवाई संसाधित करने के लिए PendingIntent आवश्यकता होती है
    • यह निर्दिष्ट करने के लिए वैकल्पिक बूलियन कि क्या इस समस्या को सीधे सुरक्षा केंद्र स्क्रीन से हल किया जा सकता है (डिफ़ॉल्ट false है)
    • वैकल्पिक CharSequence सफलता संदेश, जब समस्या सफलतापूर्वक हल हो जाती है तो उपयोगकर्ता को सीधे सुरक्षा केंद्र स्क्रीन से प्रदर्शित किया जाता है
  • वैकल्पिक PendingIntent जिसे तब कॉल किया जाता है जब उपयोगकर्ता समस्या को ख़ारिज कर देता है (डिफ़ॉल्ट कुछ भी नहीं कहा जाता है)
  • आवश्यक String समस्या प्रकार पहचानकर्ता; यह समस्या पहचानकर्ता के समान है लेकिन इसका अद्वितीय होना आवश्यक नहीं है और इसका उपयोग लॉगिंग के लिए किया जाता है
  • डिडुप्लीकेशन आईडी के लिए वैकल्पिक String , यह अलग-अलग स्रोतों से एक ही SafetySourceIssue पोस्ट करने की अनुमति देता है और इसे यूआई में केवल एक बार दिखाता है, यह मानते हुए कि उनके पास एक ही deduplicationGroup है (एंड्रॉइड 14 से शुरू)। यदि निर्दिष्ट नहीं किया गया है, तो समस्या को कभी भी डुप्लिकेट नहीं किया जाएगा
  • एट्रिब्यूशन शीर्षक के लिए वैकल्पिक CharSequence , यह एक टेक्स्ट है जो दिखाता है कि चेतावनी कार्ड कहां से उत्पन्न हुआ (एंड्रॉइड 14 से शुरू)। यदि निर्दिष्ट नहीं है तो SafetySourcesGroup के शीर्षक का उपयोग करता है
  • वैकल्पिक समस्या कार्रवाईशीलता (एंड्रॉइड 14 शुरू करना), जो इनमें से एक होनी चाहिए:
    • ISSUE_ACTIONABILITY_MANUAL : उपयोगकर्ता को इस समस्या को मैन्युअल रूप से हल करने की आवश्यकता है। यह डिफ़ॉल्ट है.
    • ISSUE_ACTIONABILITY_TIP : यह समस्या केवल एक टिप है और इसके लिए किसी उपयोगकर्ता इनपुट की आवश्यकता नहीं होगी।
    • ISSUE_ACTIONABILITY_AUTOMATIC : इस समस्या पर पहले ही कार्रवाई की जा चुकी है और इसके लिए किसी उपयोगकर्ता इनपुट की आवश्यकता नहीं होगी।
  • वैकल्पिक अधिसूचना व्यवहार (एंड्रॉइड 14 प्रारंभ करना), जो इनमें से एक होना चाहिए:
    • NOTIFICATION_BEHAVIOR_UNSPECIFIED : सुरक्षा केंद्र तय करेगा कि चेतावनी कार्ड के लिए अधिसूचना की आवश्यकता है या नहीं। यह डिफ़ॉल्ट है.
    • NOTIFICATION_BEHAVIOR_NEVER : कोई अधिसूचना पोस्ट नहीं की गई है।
    • NOTIFICATION_BEHAVIOR_DELAYED : समस्या के पहली बार रिपोर्ट होने के कुछ समय बाद एक अधिसूचना पोस्ट की जाती है।
    • NOTIFICATION_BEHAVIOR_IMMEDIATELY : समस्या की सूचना मिलते ही एक अधिसूचना पोस्ट कर दी जाती है।
  • वैकल्पिक Notification , चेतावनी कार्ड के साथ एक कस्टम अधिसूचना दिखाने के लिए (एंड्रॉइड 14 से शुरू)। यदि निर्दिष्ट नहीं है, Notification चेतावनी कार्ड से ली गई है। की रचना:
    • आवश्यक CharSequence शीर्षक
    • आवश्यक CharSequence सारांश
    • Action तत्वों की सूची जो उपयोगकर्ता इस अधिसूचना के लिए ले सकता है
  • अपरिवर्तनीय:
    • Action उदाहरणों की सूची विशिष्ट पहचानकर्ताओं वाली क्रियाओं से बनी होनी चाहिए
    • Action इंस्टेंस की सूची में एक या दो Action तत्व होने चाहिए। यदि क्रियाशीलता ISSUE_ACTIONABILITY_MANUAL नहीं है, तो शून्य Action की अनुमति है।
    • OnDismiss PendingIntent कोई Activity उदाहरण नहीं खोलना चाहिए
    • एपीआई कॉन्फ़िगरेशन द्वारा लगाई गई अतिरिक्त आवश्यकताएं

सुरक्षा केंद्र को कुछ घटनाओं पर डेटा प्रदान किया जाता है, इसलिए यह निर्दिष्ट करना आवश्यक है कि किस कारण से स्रोत ने SafetyEvent उदाहरण के साथ SafetySourceData प्रदान किया।

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 सीधे सुरक्षा केंद्र स्क्रीन से हल किया; SafetySourceIssue.Action को हल करने में सक्षम होने के लिए सुरक्षा केंद्र के लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED के बजाय इसका उपयोग करें।
    • SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILED : हमने SafetySourceIssue.Action सीधे सुरक्षा केंद्र स्क्रीन से हल करने का प्रयास किया, लेकिन ऐसा करने में विफल रहे; SafetySourceIssue.Action विफल होने पर ट्रैक करने में सक्षम होने के लिए सुरक्षा केंद्र के लिए SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED के बजाय इसका उपयोग करें।
    • 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);

प्रदान किया गया अंतिम डेटा प्राप्त करें

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

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

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

त्रुटि की रिपोर्ट करें

यदि आप SafetySourceData डेटा एकत्र नहीं कर सकते हैं, तो आप सुरक्षा केंद्र को त्रुटि की रिपोर्ट कर सकते हैं, जो प्रविष्टि को ग्रे में बदल देता है, कैश्ड डेटा को साफ़ करता है, और सेटिंग की जांच नहीं कर सका जैसा कुछ संदेश प्रदान करता है। यदि SafetySourceIssue.Action का एक उदाहरण हल करने में विफल रहता है, तो आप एक त्रुटि की रिपोर्ट भी कर सकते हैं, ऐसी स्थिति में कैश्ड डेटा साफ़ नहीं होता है और UI प्रविष्टि नहीं बदली जाती है; लेकिन उपयोगकर्ता को यह बताने के लिए एक संदेश सामने आता है कि कुछ गलत हुआ है।

आप 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 उदाहरण खारिज होने पर ट्रिगर किया जा सकता है। सुरक्षा केंद्र इन बर्खास्तगी मुद्दों को संभालता है:

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

स्रोत को अतिरिक्त व्यवहार की आवश्यकता नहीं होनी चाहिए जब तक कि:

  • स्रोत इस व्यवहार को अलग ढंग से कार्यान्वित करने का प्रयास करता है, उदाहरण के लिए, समस्या को दोबारा कभी सामने न लाएँ।
  • स्रोत इसे कॉलबैक के रूप में उपयोग करने का प्रयास करता है, उदाहरण के लिए, जानकारी लॉग करने के लिए।

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

SafetyCenterManager API का उपयोग उपयोगकर्ताओं और प्रोफ़ाइलों में किया जा सकता है। अधिक जानकारी के लिए, मल्टीयूज़र-अवेयर ऐप्स बनाना देखें। SafetyCenterManager प्रदान करने वाला Context ऑब्जेक्ट एक 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 तक पहुंच सकते हैं और इसे रोबोइलेक्ट्रिक परीक्षण में उपयोग कर सकते हैं।

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 परीक्षणों को लिखने के बारे में अधिक जानकारी के लिए, CTS परीक्षण (CtsSafetyCenterTestCases) देखें

परीक्षण और आंतरिक एपीआई

आंतरिक एपीआई और परीक्षण एपीआई आंतरिक उपयोग के लिए हैं इसलिए इस गाइड में उनका विस्तार से वर्णन नहीं किया गया है। हालाँकि, हम भविष्य में कुछ आंतरिक एपीआई का विस्तार कर सकते हैं ताकि ओईएम को अपना यूआई बनाने की अनुमति मिल सके और हम उनका उपयोग करने के तरीके पर मार्गदर्शन प्रदान करने के लिए इस गाइड को अपडेट करेंगे।

अनुमतियां

  • MANAGE_SAFETY_CENTER
    • internal|installer|role
    • आंतरिक सुरक्षा केंद्र एपीआई के लिए उपयोग किया जाता है
    • केवल PermissionController और शेल को दी गई

सेटिंग ऐप

सुरक्षा केंद्र पुनर्निर्देशन

डिफ़ॉल्ट रूप से, सुरक्षा केंद्र को नई सुरक्षा और गोपनीयता प्रविष्टि के साथ सेटिंग ऐप के माध्यम से एक्सेस किया जाता है। यदि आप किसी भिन्न सेटिंग ऐप का उपयोग करते हैं या यदि आपने सेटिंग ऐप को संशोधित किया है, तो आपको सुरक्षा केंद्र तक पहुंचने के तरीके को अनुकूलित करने की आवश्यकता हो सकती है।

जब सुरक्षा केंद्र सक्षम हो:

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

उन्नत सुरक्षा और गोपनीयता पृष्ठ

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

सुरक्षा सूत्र

सुरक्षा केंद्र सेटिंग ऐप द्वारा प्रदान किए गए सुरक्षा स्रोतों के एक विशिष्ट सेट के साथ एकीकृत होता है:

  • लॉक स्क्रीन सुरक्षा स्रोत यह सत्यापित करता है कि लॉक स्क्रीन को पासकोड (या अन्य सुरक्षा) के साथ सेट किया गया है, ताकि यह सुनिश्चित किया जा सके कि उपयोगकर्ता की निजी जानकारी बाहरी पहुंच से सुरक्षित रखी गई है।
  • फिंगरप्रिंट या फेस सेंसर के साथ एकीकृत करने के लिए एक बायोमेट्रिक्स सुरक्षा स्रोत (डिफ़ॉल्ट रूप से छिपा हुआ) सतह पर आता है।

इन सुरक्षा केंद्र स्रोतों का स्रोत कोड एंड्रॉइड कोड खोज के माध्यम से पहुंच योग्य है। यदि सेटिंग्स ऐप को संशोधित नहीं किया गया है (पैकेज नाम, स्रोत कोड या लॉक स्क्रीन और बायोमेट्रिक्स से संबंधित स्रोत कोड में परिवर्तन नहीं किए गए हैं), तो यह एकीकरण बॉक्स से बाहर काम करना चाहिए। अन्यथा, कुछ संशोधनों की आवश्यकता हो सकती है जैसे सेटिंग्स ऐप के पैकेज नाम और सुरक्षा केंद्र के साथ एकीकृत होने वाले स्रोतों के साथ-साथ एकीकरण को बदलने के लिए कॉन्फ़िगरेशन फ़ाइल को बदलना। अधिक जानकारी के लिए, कॉन्फ़िगरेशन फ़ाइल और एकीकरण सेटिंग्स अपडेट करें देखें।

पेंडिंगइंटेंट के बारे में

यदि आप एंड्रॉइड 14 या उससे ऊपर के मौजूदा सेटिंग्स ऐप सेफ्टी सेंटर एकीकरण पर भरोसा करते हैं, तो नीचे वर्णित बग को ठीक कर दिया गया है। इस मामले में इस अनुभाग को पढ़ना आवश्यक नहीं है।

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

पेंडिंगइंटेंट वर्कअराउंड

यह बग सेटिंग्स द्वारा यह निर्धारित करने के लिए Intent इंस्टेंस एक्स्ट्रा का उपयोग करने के कारण होता है कि कौन सा टुकड़ा खोलना है। चूँकि Intent#equals , Intent इंस्टेंस एक्स्ट्रा को ध्यान में नहीं रखता है, गियर मेनू आइकन और प्रविष्टि के लिए PendingIntent इंस्टेंस को समान माना जाता है और एक ही UI पर नेविगेट किया जाता है (भले ही उनका उद्देश्य एक अलग UI पर नेविगेट करना हो)। यह समस्या QPR रिलीज़ में अनुरोध कोड द्वारा PendingIntent उदाहरणों को अलग करके ठीक की गई है। वैकल्पिक रूप से, इसे Intent#setId उपयोग करके अलग किया जा सकता है।

आंतरिक सुरक्षा स्रोत

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

ये मुख्यतः गोपनीयता संकेत हैं, उदाहरण के लिए:

  • सरल उपयोग
  • अप्रयुक्त ऐप्स को स्वतः निरस्त करें
  • स्थान पहुंच
  • अधिसूचना श्रोता
  • कार्य नीति की जानकारी