নিরাপত্তা কেন্দ্রের সাথে যোগাযোগ করুন

নিরাপত্তা কেন্দ্রে পুনঃনির্দেশ করুন

যেকোনো অ্যাপ 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 শুরু হচ্ছে)

অ্যান্ড্রয়েড 14 বা তার উপরে, নিরাপত্তা কেন্দ্রের পৃষ্ঠাটি একাধিক সাবপেজে বিভক্ত করা হয়েছে যা বিভিন্ন SafetySourcesGroup প্রতিনিধিত্ব করে (অ্যান্ড্রয়েড 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 ) ব্যবহার করে সেফটি সেন্টার সোর্স এপিআই পাওয়া যায়। API পৃষ্ঠের জন্য কোড কোড অনুসন্ধানে উপলব্ধ। API-এর বাস্তবায়ন কোড কোড অনুসন্ধানে পাওয়া যায়।

অনুমতি

নীচে তালিকাভুক্ত অনুমতিগুলি ব্যবহার করে নিরাপত্তা কেন্দ্রের উত্স APIগুলি শুধুমাত্র অনুমোদিত তালিকাভুক্ত সিস্টেম অ্যাপগুলির দ্বারা অ্যাক্সেসযোগ্য৷ অতিরিক্ত তথ্যের জন্য, প্রিভিলেজড পারমিশন অ্যালোলিস্টিং দেখুন।

  • READ_SAFETY_CENTER_STATUS
    • signature|privileged
    • SafetyCenterManager#isSafetyCenterEnabled() API এর জন্য ব্যবহার করা হয়েছে (নিরাপত্তা কেন্দ্রের উত্সগুলির জন্য প্রয়োজন নেই, তাদের শুধুমাত্র SEND_SAFETY_CENTER_UPDATE অনুমতি প্রয়োজন)
    • সুরক্ষা কেন্দ্র সক্ষম কিনা তা পরীক্ষা করে এমন সিস্টেম অ্যাপগুলির দ্বারা ব্যবহৃত হয়৷
    • শুধুমাত্র অনুমোদিত তালিকাভুক্ত সিস্টেম অ্যাপের জন্য মঞ্জুর করা হয়েছে
  • SEND_SAFETY_CENTER_UPDATE
    • internal|privileged
    • সক্ষম API এবং নিরাপত্তা উত্স API এর জন্য ব্যবহৃত হয়৷
    • শুধুমাত্র নিরাপত্তা উত্স দ্বারা ব্যবহৃত
    • শুধুমাত্র অনুমোদিত তালিকাভুক্ত সিস্টেম অ্যাপের জন্য মঞ্জুর করা হয়েছে

এই অনুমতিগুলি বিশেষাধিকারপ্রাপ্ত এবং আপনি সেগুলি শুধুমাত্র প্রাসঙ্গিক ফাইলে যোগ করার মাধ্যমে অর্জন করতে পারেন, উদাহরণস্বরূপ, সেটিংস অ্যাপের জন্য com.android.settings.xml ফাইল এবং অ্যাপের AndroidManifest.xml ফাইলে৷ অনুমতি মডেল সম্পর্কে আরও তথ্যের জন্য protectionLevel দেখুন।

সেফটি সেন্টার ম্যানেজার পান

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 সহ সেফটি সেন্টার সোর্স ডেটা সেফটি SafetySourceData অবজেক্টের সাথে সেফটি সেন্টারে সরবরাহ করা হয়, যা একটি UI এন্ট্রি এবং সমস্যাগুলির একটি তালিকা (সতর্কতা কার্ড) উপস্থাপন করে। UI এন্ট্রি এবং সতর্কীকরণ কার্ডে SafetySourceData ক্লাসে নির্দিষ্ট করা বিভিন্ন তীব্রতার মাত্রা থাকতে পারে:

  • SEVERITY_LEVEL_UNSPECIFIED
    • কোন তীব্রতা নির্দিষ্ট
    • রঙ: ধূসর বা স্বচ্ছ (এন্ট্রির SafetySourcesGroup উপর নির্ভর করে)
    • ডায়নামিক ডেটার জন্য ব্যবহৃত হয় যা UI-তে একটি স্ট্যাটিক এন্ট্রি হিসাবে বা একটি অনির্দিষ্ট এন্ট্রি দেখানোর জন্য
    • সতর্কতা কার্ডের জন্য ব্যবহার করা উচিত নয়
  • SEVERITY_LEVEL_INFORMATION
    • মৌলিক তথ্য বা ছোট পরামর্শ
    • রঙ: সবুজ
  • SEVERITY_LEVEL_RECOMMENDATION
    • প্রস্তাবনা যে ব্যবহারকারীকে এই বিষয়ে পদক্ষেপ নেওয়া উচিত, কারণ এটি তাদের ঝুঁকিতে ফেলতে পারে৷
    • রঙ: হলুদ
  • SEVERITY_LEVEL_CRITICAL_WARNING
    • সমালোচনামূলক সতর্কবাণী যে ব্যবহারকারীকে অবশ্যই এই বিষয়ে পদক্ষেপ নিতে হবে, কারণ এটি একটি ঝুঁকি উপস্থাপন করে
    • লাল রং

SafetySourceData

SafetySourceData অবজেক্টটি একটি UI এন্ট্রি, সতর্কতা কার্ড এবং ইনভেরিয়েন্টের সমন্বয়ে গঠিত।

  • ঐচ্ছিক SafetySourceStatus ইনস্ট্যান্স (UI এন্ট্রি)
  • SafetySourceIssue উদাহরণের তালিকা (সতর্কতা কার্ড)
  • ঐচ্ছিক Bundle অতিরিক্ত (১৪ থেকে শুরু)
  • অপরিবর্তনীয়:
    • SafetySourceIssue তালিকাটি অবশ্যই অনন্য শনাক্তকারীর সমস্যাগুলির সমন্বয়ে গঠিত হতে হবে।
    • SafetySourceIssue ইস্যু ইনস্ট্যান্স অবশ্যই SafetySourceStatus চেয়ে বেশি গুরুত্ব পাবে না যদি একটি থাকে (যদি না SafetySourceStatus SEVERITY_LEVEL_UNSPECIFIED হয়, যে ক্ষেত্রে SEVERITY_LEVEL_INFORMATION সমস্যা অনুমোদিত হয়)।
    • API কনফিগারেশন দ্বারা আরোপিত অতিরিক্ত প্রয়োজনীয়তা অবশ্যই পূরণ করতে হবে, উদাহরণস্বরূপ, যদি উৎসটি শুধুমাত্র-ইস্যু হয়, তাহলে এটি অবশ্যই একটি SafetySourceStatus উদাহরণ প্রদান করবে না।

SafetySourceStatus

  • CharSequence শিরোনাম আবশ্যক
  • প্রয়োজনীয় CharSequence সারাংশ
  • প্রয়োজনীয় তীব্রতা স্তর
  • ব্যবহারকারীকে সঠিক পৃষ্ঠায় পুনঃনির্দেশিত করার জন্য ঐচ্ছিক PendingIntent উদাহরণ (ডিফল্ট কনফিগারেশন থেকে intentAction ব্যবহার করে, যদি থাকে)
  • ঐচ্ছিক IconAction (এন্ট্রিতে একটি সাইড আইকন হিসাবে দেখানো হয়েছে) এর সমন্বয়ে গঠিত:
    • প্রয়োজনীয় আইকন প্রকার, যা অবশ্যই নিম্নলিখিত প্রকারগুলির মধ্যে একটি হতে হবে:
      • ICON_TYPE_GEAR : UI এন্ট্রির পাশে একটি গিয়ার হিসাবে দেখানো হয়েছে৷
      • ICON_TYPE_INFO : UI এন্ট্রির পাশে একটি তথ্য আইকন হিসাবে দেখানো হয়েছে৷
    • ব্যবহারকারীকে অন্য পৃষ্ঠায় পুনঃনির্দেশিত করার জন্য PendingIntent আবশ্যক
  • ঐচ্ছিক বুলিয়ান enabled মান যা UI এন্ট্রিকে অক্ষম হিসাবে চিহ্নিত করার অনুমতি দেয়, তাই এটি ক্লিকযোগ্য নয় (ডিফল্ট true )
  • অপরিবর্তনীয়:
    • PendingIntent দৃষ্টান্ত একটি Activity উদাহরণ খুলতে হবে.
    • যদি এন্ট্রি নিষ্ক্রিয় করা হয়, তাহলে এটিকে SEVERITY_LEVEL_UNSPECIFIED হিসেবে মনোনীত করতে হবে।
    • API কনফিগারেশন দ্বারা আরোপিত অতিরিক্ত প্রয়োজনীয়তা।

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
    • এই সমস্যাটি নিরাপত্তা কেন্দ্রের স্ক্রীন থেকে সরাসরি সমাধান করা যায় কিনা তা নির্দিষ্ট করার জন্য ঐচ্ছিক বুলিয়ান (ডিফল্ট false )
    • ঐচ্ছিক CharSequence সাফল্যের বার্তা, ব্যবহারকারীর কাছে প্রদর্শিত হবে যখন সমস্যাটি সরাসরি নিরাপত্তা কেন্দ্রের স্ক্রীন থেকে সফলভাবে সমাধান করা হয়
  • ঐচ্ছিক PendingIntent যাকে বলা হয় যখন ব্যবহারকারী সমস্যাটি খারিজ করে দেয় (ডিফল্ট বলতে কিছুই বলা হয় না)
  • প্রয়োজনীয় String সমস্যা টাইপ শনাক্তকারী; এটি সমস্যা শনাক্তকারীর অনুরূপ কিন্তু অনন্য হতে হবে না এবং লগিংয়ের জন্য ব্যবহার করা হয়
  • ডিডুপ্লিকেশন আইডির জন্য ঐচ্ছিক String , এটি বিভিন্ন উত্স থেকে একই SafetySourceIssue পোস্ট করার অনুমতি দেয় এবং এটিকে শুধুমাত্র একবার UI-তে দেখানোর অনুমান করে তাদের একই 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 অনুমোদিত।
    • OnDismiss PendingIntent একটি Activity উদাহরণ খুলতে হবে না
    • API কনফিগারেশন দ্বারা আরোপিত অতিরিক্ত প্রয়োজনীয়তা

সেফটি সেন্টারে নির্দিষ্ট কিছু ইভেন্টের উপর ডেটা প্রদান করা হয়, তাই একটি 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 সমাধান করেছি। সরাসরি সেফটি সেন্টার স্ক্রীন থেকে অ্যাকশন; নিরাপত্তা কেন্দ্রের জন্য 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);

দেওয়া শেষ ডেটা পান

আপনি আপনার অ্যাপের মালিকানাধীন একটি উৎসের জন্য নিরাপত্তা কেন্দ্রে দেওয়া শেষ ডেটা পেতে পারেন। আপনি এটি ব্যবহার করতে পারেন আপনার নিজস্ব UI-তে কিছু প্রকাশ করতে, একটি ব্যয়বহুল অপারেশন সম্পাদন করার আগে ডেটা আপডেট করা প্রয়োজন কিনা তা পরীক্ষা করতে, অথবা কিছু পরিবর্তনের সাথে বা একটি নতুন 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.ActionPendingIntent ইনস্ট্যান্স। নিরাপত্তা উৎসের পাঠানো অ্যাকশন ট্রিগার হয়, যা পটভূমিতে সমস্যাটির সমাধান করে এবং এটি হয়ে গেলে নিরাপত্তা কেন্দ্রকে অবহিত করে।

মীমাংসামূলক ক্রিয়াগুলি বাস্তবায়নের জন্য, নিরাপত্তা কেন্দ্রের উত্স একটি পরিষেবা ব্যবহার করতে পারে যদি অপারেশনে কিছু সময় লাগবে ( 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 বোতাম) ট্যাপ করে নিরাপত্তা কেন্দ্রের স্ক্রিনে এটি খারিজ করতে পারেন।
  • যখন কোনো ব্যবহারকারী কোনো সমস্যা খারিজ করে দেন, যদি সমস্যাটি চলতে থাকে, তাহলে সেটি আবার UI-তে দেখা যাবে না।
  • ডিভাইস রিবুট করার সময় একটি ডিস্কে ক্রমাগত বরখাস্ত করা থাকে।
  • যদি সেফটি সেন্টার সোর্স একটি সমস্যা প্রদান করা বন্ধ করে দেয় এবং তারপরে পরবর্তী সময়ে আবার সমস্যাটি প্রদান করে, তাহলে সমস্যাটি আবার দেখা যায়। এটি এমন পরিস্থিতিতে মঞ্জুরি দেওয়ার জন্য যেখানে একজন ব্যবহারকারী একটি সতর্কতা দেখেন, এটি খারিজ করে দেন, তারপর এমন পদক্ষেপ নেন যা সমস্যাটি কমিয়ে দেয় কিন্তু তারপর ব্যবহারকারী আবার এমন কিছু করে যা একই রকম সমস্যার সৃষ্টি করে। এই মুহুর্তে, সতর্কতা কার্ডটি পুনরুত্থিত হওয়া উচিত।
  • হলুদ এবং লাল সতর্কীকরণ কার্ডগুলি প্রতি 180 দিনে পুনরুত্থিত হয় যদি না ব্যবহারকারী একাধিকবার তাদের বাতিল না করেন।

উত্স দ্বারা অতিরিক্ত আচরণের প্রয়োজন হবে না যদি না:

  • উত্সটি এই আচরণটি ভিন্নভাবে প্রয়োগ করার চেষ্টা করে, উদাহরণস্বরূপ, কখনও সমস্যাটি পুনরুত্থিত করবেন না।
  • উত্সটি এটিকে কলব্যাক হিসাবে ব্যবহার করার চেষ্টা করে, উদাহরণস্বরূপ, তথ্য লগ করার জন্য৷

একাধিক ব্যবহারকারী/প্রোফাইলের জন্য ডেটা প্রদান করুন

SafetyCenterManager API ব্যবহারকারী এবং প্রোফাইল জুড়ে ব্যবহার করা যেতে পারে। আরও তথ্যের জন্য, মাল্টিউজার-সচেতন অ্যাপস তৈরি করা দেখুন। 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" কনফিগারেশন ফাইলে উৎসের জন্য সেট করা হয়, তখন নিম্নলিখিতটি ঘটে:

  • ব্যবহারকারীর (প্রোফাইল অভিভাবক) এবং এর সাথে সম্পর্কিত সমস্ত পরিচালিত প্রোফাইলের জন্য একটি UI এন্ট্রি রয়েছে (যা titleForWork উদাহরণ ব্যবহার করে)।
  • রিফ্রেশ বা রিস্ক্যান সংকেত প্রোফাইল প্যারেন্ট এবং সমস্ত সংশ্লিষ্ট পরিচালিত প্রোফাইলের জন্য পাঠানো হয়। সংশ্লিষ্ট রিসিভার প্রতিটি প্রোফাইলের জন্য শুরু হয় এবং সংশ্লিষ্ট ডেটা সরাসরি SafetyCenterManager কে প্রদান করতে পারে যদি না রিসিভার বা অ্যাপটি singleUser না হয়।

  • উত্সটি ব্যবহারকারী এবং এর সমস্ত পরিচালিত প্রোফাইলগুলির জন্য ডেটা সরবরাহ করবে বলে আশা করা হচ্ছে৷ প্রোফাইলের উপর নির্ভর করে প্রতিটি UI এন্ট্রির ডেটা ভিন্ন হতে পারে।

পরীক্ষামূলক

আপনি 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)

পরীক্ষা এবং অভ্যন্তরীণ API

অভ্যন্তরীণ API এবং পরীক্ষা APIগুলি অভ্যন্তরীণ ব্যবহারের জন্য তাই এই নির্দেশিকায় সেগুলি বিস্তারিতভাবে বর্ণনা করা হয়নি৷ যাইহোক, আমরা ভবিষ্যতে কিছু অভ্যন্তরীণ API-কে প্রসারিত করতে পারি যাতে OEM-কে তাদের নিজস্ব UI তৈরি করার অনুমতি দেওয়া হয় এবং কীভাবে সেগুলি ব্যবহার করতে হয় সে সম্পর্কে নির্দেশিকা প্রদান করতে আমরা এই নির্দেশিকা আপডেট করব।

অনুমতি

  • MANAGE_SAFETY_CENTER
    • internal|installer|role
    • অভ্যন্তরীণ নিরাপত্তা কেন্দ্র API-এর জন্য ব্যবহৃত
    • শুধুমাত্র পারমিশন কন্ট্রোলার এবং শেলকে দেওয়া হয়েছে

সেটিংস অ্যাপ

নিরাপত্তা কেন্দ্র পুনর্নির্দেশ

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

যখন নিরাপত্তা কেন্দ্র সক্রিয় করা হয়:

  • উত্তরাধিকার গোপনীয়তা এন্ট্রি লুকানো কোড
  • উত্তরাধিকার নিরাপত্তা এন্ট্রি লুকানো কোড
  • নতুন নিরাপত্তা এবং গোপনীয়তা এন্ট্রি কোড যোগ করা হয়
  • নতুন নিরাপত্তা ও গোপনীয়তা এন্ট্রি নিরাপত্তা কেন্দ্র কোডে পুনঃনির্দেশ করে
  • android.settings.PRIVACY_SETTINGS এবং android.settings.SECURITY_SETTINGS অভিপ্রায় ক্রিয়াগুলিকে সেফটি সেন্টার খুলতে পুনঃনির্দেশিত করা হয়েছে (কোড: নিরাপত্তা , গোপনীয়তা )

উন্নত নিরাপত্তা এবং গোপনীয়তা পৃষ্ঠা

সেটিংস অ্যাপটিতে আরও নিরাপত্তা সেটিংস এবং আরও গোপনীয়তা সেটিংস শিরোনামের অধীনে অতিরিক্ত সেটিংস রয়েছে, নিরাপত্তা কেন্দ্র থেকে উপলব্ধ:

  • উন্নত নিরাপত্তা কোড

  • উন্নত গোপনীয়তা কোড

  • অ্যান্ড্রয়েড 14 থেকে শুরু করে, উন্নত নিরাপত্তা এবং উন্নত গোপনীয়তা সেটিংস পৃষ্ঠাটি "com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS" সহ একটি একক "আরো সুরক্ষা এবং গোপনীয়তা" পৃষ্ঠার অধীনে একত্রিত করা হয়েছে

নিরাপত্তা সূত্র

নিরাপত্তা কেন্দ্র সেটিংস অ্যাপ দ্বারা প্রদত্ত নিরাপত্তা উত্সগুলির একটি নির্দিষ্ট সেটের সাথে সংহত করে:

  • একটি লক স্ক্রিন নিরাপত্তা উৎস যাচাই করে যে একটি লক স্ক্রিন একটি পাসকোড (বা অন্যান্য নিরাপত্তা) সহ সেট আপ করা হয়েছে, যাতে ব্যবহারকারীর ব্যক্তিগত তথ্য বাহ্যিক অ্যাক্সেস থেকে নিরাপদ রাখা হয়।
  • একটি বায়োমেট্রিক্স নিরাপত্তা উৎস (ডিফল্টরূপে লুকানো) একটি আঙ্গুলের ছাপ বা মুখ সেন্সরের সাথে একীভূত করতে পৃষ্ঠতল।

এই নিরাপত্তা কেন্দ্র উত্সগুলির জন্য সোর্স কোড Android কোড অনুসন্ধানের মাধ্যমে অ্যাক্সেসযোগ্য৷ সেটিংস অ্যাপটি যদি পরিবর্তন না করা হয় (প্যাকেজের নাম, সোর্স কোড বা সোর্স কোড যা একটি লক স্ক্রিন এবং বায়োমেট্রিক্সের সাথে কাজ করে তাতে পরিবর্তন করা হয় না), তাহলে এই ইন্টিগ্রেশনটি বাক্সের বাইরে কাজ করা উচিত। অন্যথায়, কিছু পরিবর্তনের প্রয়োজন হতে পারে যেমন সেটিংস অ্যাপের প্যাকেজ নাম পরিবর্তন করতে কনফিগারেশন ফাইল পরিবর্তন করা এবং সেফটি সেন্টারের সাথে একীভূত হওয়া উৎসগুলি, সেইসাথে ইন্টিগ্রেশন। আরও তথ্যের জন্য, কনফিগারেশন ফাইল আপডেট করুন এবং ইন্টিগ্রেশন সেটিংস দেখুন।

PendingIntent সম্পর্কে

আপনি যদি Android 14 বা তার উপরে বিদ্যমান সেটিংস অ্যাপ সেফটি সেন্টার ইন্টিগ্রেশনের উপর নির্ভর করেন, নিচে বর্ণিত বাগটি ঠিক করা হয়েছে। এই ক্ষেত্রে এই বিভাগটি পড়ার প্রয়োজন নেই।

যখন আপনি নিশ্চিত হন যে বাগটি বিদ্যমান নেই, তখন নিরাপত্তা কেন্দ্রের মধ্যে সমাধান বন্ধ true সেটিংস অ্যাপ config_isSafetyCenterLockScreenPendingIntentFixed এ একটি XML বুলিয়ান রিসোর্স কনফিগারেশন মান সেট করুন।

পেন্ডিংইন্টেন্ট ওয়ার্কআউন্ড

কোন খণ্ডটি খুলতে হবে তা নির্ধারণ করতে Intent ইনস্ট্যান্স অতিরিক্ত ব্যবহার করে সেটিংসের কারণে এই বাগটি ঘটে। যেহেতু Intent#equals Intent ইনস্ট্যান্স অতিরিক্ত বিবেচনা করে না, তাই গিয়ার মেনু আইকন এবং এন্ট্রির জন্য PendingIntent ইন্সট্যান্স সমান হিসাবে বিবেচিত হয় এবং একই UI-তে নেভিগেট করা হয় (যদিও তারা একটি ভিন্ন UI-তে নেভিগেট করার উদ্দেশ্যে করা হয়)। এই সমস্যাটি একটি QPR রিলিজে স্থির করা হয়েছে অনুরোধ কোড দ্বারা PendingIntent দৃষ্টান্তগুলিকে আলাদা করে। বিকল্পভাবে, Intent#setId ব্যবহার করে এটি আলাদা করা যেতে পারে।

অভ্যন্তরীণ নিরাপত্তা সূত্র

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

এগুলি প্রধানত গোপনীয়তা সংকেত, উদাহরণস্বরূপ:

  • অ্যাক্সেসযোগ্যতা
  • অব্যবহৃত অ্যাপগুলি স্বয়ংক্রিয়ভাবে প্রত্যাহার করুন
  • অবস্থান অ্যাক্সেস
  • বিজ্ঞপ্তি শ্রোতা
  • কাজের নীতির তথ্য