ডিভাইস প্রশাসন ওভারভিউ

ডিভাইস অ্যাডমিন অবচয় অ্যান্ড্রয়েড 9 (API স্তর 28) দিয়ে শুরু করে, কিছু অ্যাডমিন নীতিগুলি যখন কোনও ডিভাইস প্রশাসক দ্বারা আমন্ত্রণ জানানো হয় তখন তা অবমূল্যায়িত হিসাবে চিহ্নিত করা হবে৷ আমরা আপনাকে এই পরিবর্তনের জন্য এখনই প্রস্তুত করা শুরু করার পরামর্শ দিই। আরও জানতে এবং মাইগ্রেশন বিকল্পগুলি দেখতে, ডিভাইস অ্যাডমিন অবচয় পড়ুন।

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

এই দস্তাবেজটি সেই বিকাশকারীদের জন্য যারা Android-চালিত ডিভাইসগুলির জন্য এন্টারপ্রাইজ সমাধানগুলি বিকাশ করতে চান৷ এটি Android দ্বারা চালিত কর্মচারী ডিভাইসগুলির জন্য শক্তিশালী নিরাপত্তা প্রদানের জন্য ডিভাইস প্রশাসন API দ্বারা প্রদত্ত বিভিন্ন বৈশিষ্ট্য নিয়ে আলোচনা করে৷

দ্রষ্টব্য Android এর জন্য ওয়ার্ক ডিপ্লোয়মেন্টের জন্য একটি কাজের নীতি নিয়ন্ত্রক তৈরির তথ্যের জন্য, একটি ডিভাইস নীতি নিয়ন্ত্রক তৈরি করুন দেখুন৷

হেডলেস ডিভাইসের মালিক মোড

অ্যান্ড্রয়েড 14 (এপিআই লেভেল 34) হেডলেস সিস্টেম ইউজার মোড প্রবর্তন করে (যে ডিভাইসগুলিতে UserManager.isHeadlessSystemUserMode true দেখায়)। হেডলেস সিস্টেম ইউজার মোডে, সিস্টেম ব্যবহারকারী একটি পটভূমি ব্যবহারকারী এবং শেষ-ব্যবহারকারীর মিথস্ক্রিয়া জন্য অতিরিক্ত অগ্রভাগ ব্যবহারকারীদের উপর নির্ভর করে। অ্যান্ড্রয়েড 14 একটি হেডলেস ডিভাইস মালিকের অধিভুক্ত মোডও প্রবর্তন করে, যা ডিভাইসের মালিক সেট করা সিস্টেম ব্যবহারকারী ব্যতীত অন্য সমস্ত অনুমোদিত ব্যবহারকারীদের সাথে একটি প্রোফাইল মালিককে যুক্ত করে।

হেডলেস সিস্টেম ব্যবহারকারীর সাথে কনফিগার করা ডিভাইসগুলিতে (যেখানে সিস্টেম ব্যবহারকারী ব্যাকগ্রাউন্ডে চলে), শুধুমাত্র ডিভাইস নীতিগুলি যা বিশ্বব্যাপী (যে নীতিগুলি সমস্ত ব্যবহারকারীর জন্য প্রযোজ্য) ফোরগ্রাউন্ড ব্যবহারকারী বা ব্যবহারকারীদের জন্য প্রয়োগ করা হয়। বিস্তারিত জানার জন্য addUserRestriction দেখুন।

Android ডিভাইস নির্মাতারা source.android.com-এ প্রকাশিত নির্দেশিকা উল্লেখ করতে পারে।

ডিভাইস প্রশাসন API ওভারভিউ

ডিভাইস অ্যাডমিনিস্ট্রেশন এপিআই ব্যবহার করতে পারে এমন অ্যাপের ধরনগুলির উদাহরণ এখানে দেওয়া হল:

  • ইমেল ক্লায়েন্ট.
  • সুরক্ষা অ্যাপ্লিকেশন যা দূরবর্তী মুছা করে।
  • ডিভাইস ম্যানেজমেন্ট পরিষেবা এবং অ্যাপ।

এটা কিভাবে কাজ করে?

ব্যবহারকারীরা তাদের ডিভাইসে ইনস্টল করে এমন ডিভাইস অ্যাডমিন অ্যাপ লিখতে আপনি ডিভাইস অ্যাডমিনিস্ট্রেশন API ব্যবহার করেন। ডিভাইস প্রশাসক অ্যাপ পছন্দসই নীতিগুলি প্রয়োগ করে৷ এখানে কিভাবে এটা কাজ করে:

  • একজন সিস্টেম অ্যাডমিনিস্ট্রেটর একটি ডিভাইস অ্যাডমিন অ্যাপ লেখেন যা দূরবর্তী/স্থানীয় ডিভাইস নিরাপত্তা নীতি প্রয়োগ করে। এই নীতিগুলি অ্যাপে হার্ড-কোড করা যেতে পারে, বা অ্যাপটি গতিশীলভাবে তৃতীয় পক্ষের সার্ভার থেকে নীতিগুলি আনতে পারে৷
  • অ্যাপটি ব্যবহারকারীদের ডিভাইসে ইনস্টল করা আছে। অ্যান্ড্রয়েডের বর্তমানে কোনো স্বয়ংক্রিয় ব্যবস্থার সমাধান নেই। একটি সিস্যাডমিন ব্যবহারকারীদের কাছে অ্যাপটি বিতরণ করতে পারে এমন কিছু উপায় নিম্নরূপ:
    • গুগল প্লে।
    • অন্য দোকান থেকে ইনস্টলেশন সক্ষম করা হচ্ছে৷
    • ইমেল বা ওয়েবসাইটের মতো অন্যান্য মাধ্যমে অ্যাপটি বিতরণ করা।
  • সিস্টেম ব্যবহারকারীকে ডিভাইস প্রশাসক অ্যাপ্লিকেশন সক্ষম করতে অনুরোধ করে। কীভাবে এবং কখন এটি ঘটে তা অ্যাপটি কীভাবে প্রয়োগ করা হয় তার উপর নির্ভর করে।
  • একবার ব্যবহারকারীরা ডিভাইস অ্যাডমিন অ্যাপ সক্ষম করলে, তারা এর নীতির অধীন। এই নীতিগুলি মেনে চলা সাধারণত সুবিধাগুলি প্রদান করে, যেমন সংবেদনশীল সিস্টেম এবং ডেটা অ্যাক্সেস।

ব্যবহারকারীরা ডিভাইস অ্যাডমিন অ্যাপটি সক্ষম না করলে, এটি ডিভাইসে থেকে যায়, কিন্তু একটি নিষ্ক্রিয় অবস্থায় থাকে। ব্যবহারকারীরা এর নীতির অধীন হবে না, এবং তারা বিপরীতভাবে অ্যাপের কোনো সুবিধা পাবেন না—উদাহরণস্বরূপ, তারা ডেটা সিঙ্ক করতে সক্ষম নাও হতে পারে।

যদি কোনও ব্যবহারকারী নীতিগুলি মেনে চলতে ব্যর্থ হন (উদাহরণস্বরূপ, যদি কোনও ব্যবহারকারী নির্দেশিকা লঙ্ঘন করে এমন একটি পাসওয়ার্ড সেট করেন), তবে এটি কীভাবে পরিচালনা করবেন তা অ্যাপের উপর নির্ভর করে। যাইহোক, সাধারণত এর ফলে ব্যবহারকারী ডেটা সিঙ্ক করতে পারবেন না।

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

একটি ডিভাইসে একাধিক সক্রিয় অ্যাডমিন অ্যাপ থাকলে, কঠোর নীতি প্রয়োগ করা হয়। একটি নির্দিষ্ট অ্যাডমিন অ্যাপ টার্গেট করার কোন উপায় নেই।

একটি বিদ্যমান ডিভাইস প্রশাসক অ্যাপ আনইনস্টল করতে, ব্যবহারকারীদের প্রথমে প্রশাসক হিসাবে অ্যাপটিকে নিবন্ধনমুক্ত করতে হবে।

নীতিমালা

একটি এন্টারপ্রাইজ সেটিংয়ে, প্রায়শই এমন হয় যে কর্মচারী ডিভাইসগুলিকে অবশ্যই ডিভাইসের ব্যবহার নিয়ন্ত্রণকারী নীতিগুলির একটি কঠোর সেট মেনে চলতে হবে। ডিভাইস অ্যাডমিনিস্ট্রেশন API সারণি 1 এ তালিকাভুক্ত নীতিগুলিকে সমর্থন করে৷ মনে রাখবেন যে ডিভাইস প্রশাসন API বর্তমানে শুধুমাত্র স্ক্রীন লকের জন্য পাসওয়ার্ড সমর্থন করে:

সারণী 1. ডিভাইস অ্যাডমিনিস্ট্রেশন API দ্বারা সমর্থিত নীতিগুলি৷

নীতি বর্ণনা
পাসওয়ার্ড সক্রিয় ডিভাইসগুলি পিন বা পাসওয়ার্ড চাইবে।
ন্যূনতম পাসওয়ার্ড দৈর্ঘ্য পাসওয়ার্ডের জন্য প্রয়োজনীয় সংখ্যক অক্ষর সেট করুন। উদাহরণস্বরূপ, আপনাকে কমপক্ষে ছয়টি অক্ষর থাকতে পিন বা পাসওয়ার্ডের প্রয়োজন হতে পারে।
আলফানিউমেরিক পাসওয়ার্ড প্রয়োজন পাসওয়ার্ডে অক্ষর এবং সংখ্যার সমন্বয় থাকা প্রয়োজন। তারা প্রতীকী অক্ষর অন্তর্ভুক্ত করতে পারে।
জটিল পাসওয়ার্ড প্রয়োজন পাসওয়ার্ডে কমপক্ষে একটি অক্ষর, একটি সংখ্যাসূচক সংখ্যা এবং একটি বিশেষ প্রতীক থাকা আবশ্যক৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম অক্ষর প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একজনের জন্য পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম সংখ্যক অক্ষর৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম ছোট হাতের অক্ষর প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একটির পাসওয়ার্ডে ন্যূনতম সংখ্যার ছোট হাতের অক্ষর প্রয়োজন৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম নন-অক্ষর অক্ষর প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একটির জন্য পাসওয়ার্ডে অক্ষরবিহীন অক্ষরের ন্যূনতম সংখ্যা। অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম সংখ্যাসূচক সংখ্যা প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একজনের জন্য পাসওয়ার্ডে প্রয়োজনীয় সংখ্যাসূচক সংখ্যার ন্যূনতম সংখ্যা৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম চিহ্নের প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একজনের জন্য পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম সংখ্যার চিহ্ন। অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডে ন্যূনতম বড় হাতের অক্ষর প্রয়োজন সমস্ত প্রশাসক বা নির্দিষ্ট একজনের জন্য পাসওয়ার্ডে ন্যূনতম সংখ্যক বড় হাতের অক্ষর প্রয়োজন৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ডের মেয়াদ শেষ যখন পাসওয়ার্ডের মেয়াদ শেষ হবে, তখন থেকে মিলিসেকেন্ডে ডেল্টা হিসাবে প্রকাশ করা হয় যখন কোনও ডিভাইস অ্যাডমিন মেয়াদ শেষ হওয়ার সময়সীমা সেট করে। অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
পাসওয়ার্ড ইতিহাস সীমাবদ্ধতা এই নীতি ব্যবহারকারীদের শেষ n অনন্য পাসওয়ার্ড পুনরায় ব্যবহার করতে বাধা দেয়৷ এই নীতিটি সাধারণত setPasswordExpirationTimeout() এর সাথে ব্যবহার করা হয়, যা একটি নির্দিষ্ট সময় অতিবাহিত হওয়ার পরে ব্যবহারকারীদের তাদের পাসওয়ার্ড আপডেট করতে বাধ্য করে৷ অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
সর্বাধিক ব্যর্থ পাসওয়ার্ড প্রচেষ্টা ডিভাইসটি তার ডেটা মুছে ফেলার আগে ব্যবহারকারী কতবার ভুল পাসওয়ার্ড লিখতে পারে তা নির্দিষ্ট করে৷ ডিভাইস অ্যাডমিনিস্ট্রেশন API প্রশাসকদেরকে দূরবর্তীভাবে ডিভাইসটিকে ফ্যাক্টরি ডিফল্টে রিসেট করার অনুমতি দেয়। ডিভাইসটি হারিয়ে গেলে বা চুরি হয়ে গেলে এটি ডেটা সুরক্ষিত করে।
সর্বাধিক নিষ্ক্রিয়তা সময় লক ডিভাইসটি স্ক্রীন লক করার আগে ব্যবহারকারী শেষবার স্ক্রীন স্পর্শ করার বা একটি বোতাম টিপানোর সময়কালের দৈর্ঘ্য সেট করে৷ যখন এটি ঘটে, ব্যবহারকারীরা তাদের ডিভাইসগুলি ব্যবহার করতে এবং ডেটা অ্যাক্সেস করার আগে তাদের পিন বা পাসওয়ার্ডগুলি আবার প্রবেশ করতে হবে৷ মান 1 থেকে 60 মিনিটের মধ্যে হতে পারে।
স্টোরেজ এনক্রিপশন প্রয়োজন নির্দিষ্ট করে যে স্টোরেজ এলাকা এনক্রিপ্ট করা উচিত, যদি ডিভাইস এটি সমর্থন করে। অ্যান্ড্রয়েড 3.0-এ চালু করা হয়েছে।
ক্যামেরা নিষ্ক্রিয় করুন সুনির্দিষ্ট করে যে ক্যামেরাটি নিষ্ক্রিয় করা উচিত। মনে রাখবেন এটি একটি স্থায়ী অক্ষম হতে হবে না. প্রসঙ্গ, সময় ইত্যাদির উপর ভিত্তি করে ক্যামেরাটি গতিশীলভাবে সক্রিয়/অক্ষম করা যেতে পারে। অ্যান্ড্রয়েড 4.0-এ চালু করা হয়েছে।

অন্যান্য বৈশিষ্ট্য

উপরের সারণীতে তালিকাভুক্ত নীতিগুলিকে সমর্থন করার পাশাপাশি, ডিভাইস প্রশাসন API আপনাকে নিম্নলিখিতগুলি করতে দেয়:

  • ব্যবহারকারীকে একটি নতুন পাসওয়ার্ড সেট করতে অনুরোধ করুন।
  • অবিলম্বে ডিভাইস লক করুন।
  • ডিভাইসের ডেটা মুছুন (অর্থাৎ, ডিভাইসটিকে তার ফ্যাক্টরি ডিফল্টে পুনরুদ্ধার করুন)।

নমুনা অ্যাপ্লিকেশন

এই পৃষ্ঠায় ব্যবহৃত উদাহরণগুলি ডিভাইস অ্যাডমিনিস্ট্রেশন API নমুনার উপর ভিত্তি করে, যা SDK নমুনায় অন্তর্ভুক্ত (Android SDK ম্যানেজারের মাধ্যমে উপলব্ধ) এবং আপনার সিস্টেমে <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java হিসাবে অবস্থিত <sdk_root>/ApiDemos/app/src/main/java/com/example/android/apis/app/DeviceAdminSample.java

নমুনা অ্যাপটি ডিভাইস অ্যাডমিন বৈশিষ্ট্যগুলির একটি ডেমো অফার করে। এটি ব্যবহারকারীদের একটি ইউজার ইন্টারফেস উপস্থাপন করে যা তাদের ডিভাইস অ্যাডমিন অ্যাপ সক্ষম করতে দেয়। একবার তারা অ্যাপটি সক্ষম করলে, তারা নিম্নলিখিতগুলি করতে ব্যবহারকারী ইন্টারফেসের বোতামগুলি ব্যবহার করতে পারে:

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

চিত্র 1. নমুনা অ্যাপের স্ক্রিনশট

একটি ডিভাইস প্রশাসন অ্যাপ্লিকেশন উন্নয়নশীল

সিস্টেম অ্যাডমিনিস্ট্রেটররা ডিভাইস অ্যাডমিনিস্ট্রেশন API ব্যবহার করতে পারে এমন একটি অ্যাপ লিখতে যা দূরবর্তী/স্থানীয় ডিভাইস নিরাপত্তা নীতি প্রয়োগ করে। এই বিভাগে একটি ডিভাইস অ্যাডমিনিস্ট্রেশন অ্যাপ তৈরিতে জড়িত পদক্ষেপগুলির সংক্ষিপ্ত বিবরণ দেওয়া হয়েছে।

ম্যানিফেস্ট তৈরি করা

ডিভাইস অ্যাডমিনিস্ট্রেশন API ব্যবহার করতে, অ্যাপের ম্যানিফেস্টে নিম্নলিখিতগুলি অন্তর্ভুক্ত থাকতে হবে:

  • DeviceAdminReceiver এর একটি সাবক্লাস যা নিম্নলিখিতগুলি অন্তর্ভুক্ত করে:
    • BIND_DEVICE_ADMIN অনুমতি।
    • ACTION_DEVICE_ADMIN_ENABLED অভিপ্রায়ে সাড়া দেওয়ার ক্ষমতা, একটি অভিপ্রায় ফিল্টার হিসাবে ম্যানিফেস্টে প্রকাশ করা হয়েছে৷
  • মেটাডেটা ব্যবহার করা নিরাপত্তা নীতির একটি ঘোষণা.

এখানে ডিভাইস প্রশাসন নমুনা ম্যানিফেস্ট থেকে একটি উদ্ধৃতি আছে:

<activity android:name=".app.DeviceAdminSample"
            android:label="@string/activity_sample_device_admin">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.SAMPLE_CODE" />
    </intent-filter>
</activity>
<receiver android:name=".app.DeviceAdminSample$DeviceAdminSampleReceiver"
        android:label="@string/sample_device_admin"
        android:description="@string/sample_device_admin_description"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
    <meta-data android:name="android.app.device_admin"
            android:resource="@xml/device_admin_sample" />
    <intent-filter>
        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
    </intent-filter>
</receiver>

মনে রাখবেন যে:

  • নিম্নলিখিত বৈশিষ্ট্যগুলি স্ট্রিং সংস্থানগুলিকে নির্দেশ করে যা নমুনা অ্যাপের জন্য ApiDemos/res/values/strings.xml এ থাকে। সম্পদ সম্পর্কে আরও তথ্যের জন্য, অ্যাপ্লিকেশন সংস্থান দেখুন।
    • android:label="@string/activity_sample_device_admin" কার্যকলাপের জন্য ব্যবহারকারী-পাঠযোগ্য লেবেলকে বোঝায়।
    • android:label="@string/sample_device_admin" অনুমতির জন্য ব্যবহারকারী-পাঠযোগ্য লেবেলকে বোঝায়।
    • android:description="@string/sample_device_admin_description" অনুমতির ব্যবহারকারী-পাঠযোগ্য বর্ণনাকে বোঝায়। একটি বর্ণনা সাধারণত একটি লেবেলের চেয়ে দীর্ঘ এবং আরও তথ্যপূর্ণ।
  • android:permission="android.permission.BIND_DEVICE_ADMIN" হল এমন একটি অনুমতি যা একটি DeviceAdminReceiver সাবক্লাস থাকতে হবে, যাতে নিশ্চিত করা যায় যে শুধুমাত্র সিস্টেমই রিসিভারের সাথে ইন্টারঅ্যাক্ট করতে পারে (কোনও অ্যাপকে এই অনুমতি দেওয়া যাবে না)। এটি অন্যান্য অ্যাপকে আপনার ডিভাইস অ্যাডমিন অ্যাপের অপব্যবহার করা থেকে বাধা দেয়।
  • android.app.action.DEVICE_ADMIN_ENABLED হল প্রাথমিক অ্যাকশন যা একটি ডিভাইস পরিচালনা করার জন্য একটি DeviceAdminReceiver সাবক্লাস পরিচালনা করতে হবে। ব্যবহারকারী যখন ডিভাইস অ্যাডমিন অ্যাপটি সক্ষম করে তখন এটি রিসিভারে সেট করা হয়। আপনার কোড সাধারণত onEnabled() এ এটি পরিচালনা করে। সমর্থন করার জন্য, প্রাপকের অবশ্যই BIND_DEVICE_ADMIN অনুমতির প্রয়োজন হবে যাতে অন্য অ্যাপগুলি এটির অপব্যবহার করতে না পারে৷
  • যখন একজন ব্যবহারকারী ডিভাইস প্রশাসক অ্যাপ্লিকেশন সক্ষম করে, তখন এটি রিসিভারকে নির্দিষ্ট সিস্টেম ইভেন্টগুলির সম্প্রচারের প্রতিক্রিয়া হিসাবে ক্রিয়া সম্পাদন করার অনুমতি দেয়৷ উপযুক্ত ঘটনা ঘটলে, অ্যাপটি একটি নীতি আরোপ করতে পারে। উদাহরণস্বরূপ, যদি ব্যবহারকারী একটি নতুন পাসওয়ার্ড সেট করার চেষ্টা করে যা নীতির প্রয়োজনীয়তাগুলি পূরণ করে না, অ্যাপটি ব্যবহারকারীকে প্রয়োজনীয়তা পূরণ করে এমন একটি ভিন্ন পাসওয়ার্ড বেছে নিতে অনুরোধ করতে পারে।
  • আপনার অ্যাপ প্রকাশ করার পর রিসিভারের নাম পরিবর্তন করা এড়িয়ে চলুন। ম্যানিফেস্টের নাম পরিবর্তন হলে, ব্যবহারকারীরা অ্যাপ আপডেট করার সময় ডিভাইস অ্যাডমিন অক্ষম করা হয়। আরও জানতে, <receiver> দেখুন।
  • android:resource="@xml/device_admin_sample" মেটাডেটাতে ব্যবহৃত নিরাপত্তা নীতি ঘোষণা করে। মেটাডেটা ডিভাইস অ্যাডমিনিস্ট্রেটরের জন্য নির্দিষ্ট অতিরিক্ত তথ্য প্রদান করে, যেমনটি DeviceAdminInfo ক্লাস দ্বারা পার্স করা হয়েছে। এখানে device_admin_sample.xml এর বিষয়বস্তু রয়েছে:
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-policies>
    <limit-password />
    <watch-login />
    <reset-password />
    <force-lock />
    <wipe-data />
    <expire-password />
    <encrypted-storage />
    <disable-camera />
  </uses-policies>
</device-admin>

আপনার ডিভাইস প্রশাসন অ্যাপ ডিজাইন করার সময়, আপনাকে সমস্ত নীতি অন্তর্ভুক্ত করতে হবে না, শুধুমাত্র আপনার অ্যাপের জন্য প্রাসঙ্গিক।

ম্যানিফেস্ট ফাইলের আরও আলোচনার জন্য, Android বিকাশকারী গাইড দেখুন।

কোড বাস্তবায়ন

ডিভাইস অ্যাডমিনিস্ট্রেশন এপিআই নিম্নলিখিত ক্লাসগুলি অন্তর্ভুক্ত করে:

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

এই ক্লাসগুলি একটি সম্পূর্ণ কার্যকরী ডিভাইস প্রশাসন অ্যাপের ভিত্তি প্রদান করে। এই বিভাগের বাকি অংশ বর্ণনা করে যে আপনি কীভাবে ডিভাইস অ্যাডমিন অ্যাপ লিখতে DeviceAdminReceiver এবং DevicePolicyManager API ব্যবহার করেন।

সাবক্লাসিং ডিভাইস অ্যাডমিন রিসিভার

একটি ডিভাইস অ্যাডমিন অ্যাপ তৈরি করতে, আপনাকে অবশ্যই DeviceAdminReceiver সাবক্লাস করতে হবে। DeviceAdminReceiver ক্লাসে কলব্যাকের একটি সিরিজ থাকে যা নির্দিষ্ট ঘটনা ঘটলে ট্রিগার হয়।

এর DeviceAdminReceiver সাবক্লাসে, নমুনা অ্যাপটি কেবল নির্দিষ্ট ইভেন্টের প্রতিক্রিয়া হিসাবে একটি Toast বিজ্ঞপ্তি প্রদর্শন করে। উদাহরণ স্বরূপ:

কোটলিন

class DeviceAdminSample : DeviceAdminReceiver() {

    private fun showToast(context: Context, msg: String) {
        context.getString(R.string.admin_receiver_status, msg).let { status ->
            Toast.makeText(context, status, Toast.LENGTH_SHORT).show()
        }
    }

    override fun onEnabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_enabled))

    override fun onDisableRequested(context: Context, intent: Intent): CharSequence =
            context.getString(R.string.admin_receiver_status_disable_warning)

    override fun onDisabled(context: Context, intent: Intent) =
            showToast(context, context.getString(R.string.admin_receiver_status_disabled))

    override fun onPasswordChanged(context: Context, intent: Intent, userHandle: UserHandle) =
            showToast(context, context.getString(R.string.admin_receiver_status_pw_changed))
...
}

জাভা

public class DeviceAdminSample extends DeviceAdminReceiver {

    void showToast(Context context, String msg) {
        String status = context.getString(R.string.admin_receiver_status, msg);
        Toast.makeText(context, status, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onEnabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_enabled));
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return context.getString(R.string.admin_receiver_status_disable_warning);
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        showToast(context, context.getString(R.string.admin_receiver_status_disabled));
    }

    @Override
    public void onPasswordChanged(Context context, Intent intent, UserHandle userHandle) {
        showToast(context, context.getString(R.string.admin_receiver_status_pw_changed));
    }
...
}

অ্যাপটি সক্ষম করা হচ্ছে

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

অ্যাপটি সক্ষম করার প্রক্রিয়াটি শুরু হয় যখন ব্যবহারকারী একটি ক্রিয়া সম্পাদন করে যা ACTION_ADD_DEVICE_ADMIN অভিপ্রায়কে ট্রিগার করে৷ নমুনা অ্যাপে, ব্যবহারকারী অ্যাডমিন সক্ষম করুন চেকবক্সে ক্লিক করলে এটি ঘটে।

ব্যবহারকারী যখন অ্যাডমিন সক্ষম করুন চেকবক্সে ক্লিক করেন, তখন চিত্র 2-এ দেখানো হিসাবে ব্যবহারকারীকে ডিভাইস অ্যাডমিন অ্যাপ্লিকেশানটি সক্রিয় করতে অনুরোধ জানানোর জন্য প্রদর্শন পরিবর্তন হয়।

চিত্র 2. নমুনা অ্যাপ: অ্যাপটি সক্রিয় করা হচ্ছে

নীচে কোডটি কার্যকর করা হয় যখন ব্যবহারকারী অ্যাডমিন সক্ষম চেকবক্সে ক্লিক করেন। এটি onPreferenceChange() কলব্যাককে ট্রিগার করার প্রভাব ফেলে। এই কলব্যাকটি চালু করা হয় যখন এই Preference মান ব্যবহারকারীর দ্বারা পরিবর্তিত হয় এবং সেট করা হয় এবং/অথবা স্থায়ী হয়৷ ব্যবহারকারী অ্যাপটি সক্ষম করলে, চিত্র 2-এ দেখানো হিসাবে ব্যবহারকারীকে ডিভাইস প্রশাসক অ্যাপ সক্রিয় করতে অনুরোধ জানানোর জন্য প্রদর্শন পরিবর্তন হয়। অন্যথায়, ডিভাইস অ্যাডমিন অ্যাপটি নিষ্ক্রিয় করা হয়।

কোটলিন

override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    if (super.onPreferenceChange(preference, newValue)) return true
    val value = newValue as Boolean
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                val intent = Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).apply {
                    putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample)
                    putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                            activity.getString(R.string.add_admin_extra_app_text))
                }
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN)
                // return false - don't update checkbox until we're really active
                return false
            } else {
                dpm.removeActiveAdmin(deviceAdminSample)
                enableDeviceCapabilitiesArea(false)
                adminActive = false
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value)
    }
    return true
}

জাভা

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    if (super.onPreferenceChange(preference, newValue)) {
        return true;
    }
    boolean value = (Boolean) newValue;
    if (preference == enableCheckbox) {
        if (value != adminActive) {
            if (value) {
                // Launch the activity to have the user enable our admin.
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminSample);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                        activity.getString(R.string.add_admin_extra_app_text));
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);
                // return false - don't update checkbox until we're really active
                return false;
            } else {
                dpm.removeActiveAdmin(deviceAdminSample);
                enableDeviceCapabilitiesArea(false);
                adminActive = false;
            }
        }
    } else if (preference == disableCameraCheckbox) {
        dpm.setCameraDisabled(deviceAdminSample, value);
    }
    return true;
}

লাইন intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample) বলে যে mDeviceAdminSample (যা একটি DeviceAdminReceiver উপাদান) লক্ষ্য নীতি। এই লাইনটি চিত্র 2-এ দেখানো ইউজার ইন্টারফেসকে আহ্বান করে, যা ব্যবহারকারীদের সিস্টেমে ডিভাইস অ্যাডমিনিস্ট্রেটর যোগ করার মাধ্যমে গাইড করে (বা তাদের এটি প্রত্যাখ্যান করার অনুমতি দেয়)।

যখন অ্যাপটিকে এমন একটি অপারেশন করার প্রয়োজন হয় যা ডিভাইস অ্যাডমিন অ্যাপ্লিকেশানটি সক্ষম করা হয়েছে, তখন এটি নিশ্চিত করে যে অ্যাপটি সক্রিয় রয়েছে৷ এটি করার জন্য এটি DevicePolicyManager পদ্ধতি isAdminActive() ব্যবহার করে। লক্ষ্য করুন যে DevicePolicyManager পদ্ধতি isAdminActive() তার যুক্তি হিসাবে একটি DeviceAdminReceiver উপাদান নেয়:

কোটলিন

private lateinit var dpm: DevicePolicyManager
...
private fun isActiveAdmin(): Boolean = dpm.isAdminActive(deviceAdminSample)

জাভা

DevicePolicyManager dpm;
...
private boolean isActiveAdmin() {
    return dpm.isAdminActive(deviceAdminSample);
}

পরিচালনা নীতি

DevicePolicyManager হল একটি ডিভাইসে প্রয়োগ করা নীতিগুলি পরিচালনা করার জন্য একটি পাবলিক ক্লাস৷ DevicePolicyManager এক বা একাধিক DeviceAdminReceiver দৃষ্টান্তগুলির জন্য নীতিগুলি পরিচালনা করে৷

আপনি নিম্নলিখিত হিসাবে DevicePolicyManager এর কাছে একটি হ্যান্ডেল পাবেন:

কোটলিন

dpm = getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager

জাভা

DevicePolicyManager dpm =
    (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);

এই বিভাগটি বর্ণনা করে যে কীভাবে প্রশাসনিক কাজ সম্পাদন করতে DevicePolicyManager ব্যবহার করতে হয়:

পাসওয়ার্ড নীতি সেট করুন

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

ডিভাইসের জন্য একটি পাসওয়ার্ড সেট করুন

এই কোডটি একটি ব্যবহারকারী ইন্টারফেস প্রদর্শন করে যা ব্যবহারকারীকে একটি পাসওয়ার্ড সেট করতে অনুরোধ করে:

কোটলিন

Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD).also { intent ->
    startActivity(intent)
}

জাভা

Intent intent = new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD);
startActivity(intent);
পাসওয়ার্ডের মান সেট করুন

পাসওয়ার্ড গুণমান নিম্নলিখিত DevicePolicyManager ধ্রুবকগুলির মধ্যে একটি হতে পারে:

PASSWORD_QUALITY_ALPHABETIC
ব্যবহারকারীকে অবশ্যই একটি পাসওয়ার্ড লিখতে হবে যাতে কমপক্ষে বর্ণানুক্রমিক (বা অন্যান্য প্রতীক) অক্ষর থাকে।
PASSWORD_QUALITY_ALPHANUMERIC
ব্যবহারকারীকে অবশ্যই একটি পাসওয়ার্ড লিখতে হবে যাতে কমপক্ষে উভয় সংখ্যাসূচক এবং বর্ণানুক্রমিক (বা অন্যান্য প্রতীক) অক্ষর থাকে।
PASSWORD_QUALITY_NUMERIC
ব্যবহারকারীকে অন্তত সংখ্যাসূচক অক্ষর সম্বলিত একটি পাসওয়ার্ড লিখতে হবে।
PASSWORD_QUALITY_COMPLEX
ব্যবহারকারীকে অবশ্যই অন্তত একটি অক্ষর, একটি সংখ্যাসূচক সংখ্যা এবং একটি বিশেষ চিহ্ন সম্বলিত একটি পাসওয়ার্ড লিখতে হবে।
PASSWORD_QUALITY_SOMETHING
নীতির জন্য কিছু ধরণের পাসওয়ার্ড প্রয়োজন, তবে এটি কী তা বিবেচনা করে না।
PASSWORD_QUALITY_UNSPECIFIED
নীতির পাসওয়ার্ডের জন্য কোন প্রয়োজনীয়তা নেই।

উদাহরণস্বরূপ, আপনি এইভাবে একটি বর্ণসংখ্যার পাসওয়ার্ডের প্রয়োজনের জন্য পাসওয়ার্ড নীতি সেট করবেন:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setPasswordQuality(deviceAdminSample, DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC);
পাসওয়ার্ড সামগ্রী প্রয়োজনীয়তা সেট করুন

অ্যান্ড্রয়েড 3.0 থেকে শুরু করে, DevicePolicyManager ক্লাসে এমন পদ্ধতি রয়েছে যা আপনাকে পাসওয়ার্ডের বিষয়বস্তু ঠিক করতে দেয়। উদাহরণস্বরূপ, আপনি একটি নীতি সেট করতে পারেন যা বলে যে পাসওয়ার্ডগুলিতে কমপক্ষে n বড় হাতের অক্ষর থাকতে হবে। এখানে একটি পাসওয়ার্ডের বিষয়বস্তু সূক্ষ্ম-টিউন করার পদ্ধতি রয়েছে:

উদাহরণস্বরূপ, এই স্নিপেটটি বলে যে পাসওয়ার্ডে কমপক্ষে 2টি বড় হাতের অক্ষর থাকতে হবে:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwMinUppercase = 2
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwMinUppercase = 2;
...
dpm.setPasswordMinimumUpperCase(deviceAdminSample, pwMinUppercase);
পাসওয়ার্ডের ন্যূনতম দৈর্ঘ্য সেট করুন

আপনি নির্দিষ্ট করতে পারেন যে একটি পাসওয়ার্ড কমপক্ষে নির্দিষ্ট ন্যূনতম দৈর্ঘ্য হতে হবে। উদাহরণ স্বরূপ:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwLength: Int = ...
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwLength;
...
dpm.setPasswordMinimumLength(deviceAdminSample, pwLength);
সর্বাধিক ব্যর্থ পাসওয়ার্ড প্রচেষ্টা সেট করুন

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

কোটলিন

val dPM:DevicePolicyManager
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val maxFailedPw: Int = ...
...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int maxFailedPw;
 ...
dpm.setMaximumFailedPasswordsForWipe(deviceAdminSample, maxFailedPw);
পাসওয়ার্ডের মেয়াদ শেষ হওয়ার সময়সীমা সেট করুন

অ্যান্ড্রয়েড 3.0 থেকে শুরু করে, আপনি setPasswordExpirationTimeout() পদ্ধতিটি ব্যবহার করতে পারেন যখন একটি পাসওয়ার্ডের মেয়াদ শেষ হবে, যখন কোনও ডিভাইস প্রশাসক মেয়াদ শেষ হওয়ার সময়সীমা সেট করে তখন থেকে মিলিসেকেন্ডে ডেল্টা হিসাবে প্রকাশ করা হয়৷ উদাহরণ স্বরূপ:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwExpiration: Long = ...
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
long pwExpiration;
...
dpm.setPasswordExpirationTimeout(deviceAdminSample, pwExpiration);
ইতিহাসের উপর ভিত্তি করে পাসওয়ার্ড সীমাবদ্ধ করুন

অ্যান্ড্রয়েড 3.0 থেকে শুরু করে, আপনি ব্যবহারকারীদের পুরানো পাসওয়ার্ড পুনরায় ব্যবহার করার ক্ষমতা সীমিত করতে setPasswordHistoryLength() পদ্ধতি ব্যবহার করতে পারেন। এই পদ্ধতিটি একটি দৈর্ঘ্যের প্যারামিটার নেয়, যা নির্দিষ্ট করে কতগুলি পুরানো পাসওয়ার্ড সংরক্ষণ করা হয়েছে। যখন এই নীতি সক্রিয় থাকে, ব্যবহারকারীরা শেষ n পাসওয়ার্ডের সাথে মেলে এমন একটি নতুন পাসওয়ার্ড লিখতে পারে না৷ এটি ব্যবহারকারীদের একই পাসওয়ার্ড বারবার ব্যবহার করতে বাধা দেয়। এই নীতিটি সাধারণত setPasswordExpirationTimeout() এর সাথে ব্যবহার করা হয়, যা একটি নির্দিষ্ট সময় অতিবাহিত হওয়ার পরে ব্যবহারকারীদের তাদের পাসওয়ার্ড আপডেট করতে বাধ্য করে৷

উদাহরণস্বরূপ, এই স্নিপেট ব্যবহারকারীদের তাদের শেষ 5টি পাসওয়ার্ডের যেকোনও পুনরায় ব্যবহার করতে নিষেধ করে:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val pwHistoryLength = 5
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
int pwHistoryLength = 5;
...
dpm.setPasswordHistoryLength(deviceAdminSample, pwHistoryLength);

ডিভাইস লক সেট করুন

আপনি ব্যবহারকারীর নিষ্ক্রিয়তার সর্বোচ্চ সময়কাল সেট করতে পারেন যা ডিভাইস লক হওয়ার আগে ঘটতে পারে। উদাহরণ স্বরূপ:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
private val timeMs: Long = 1000L * timeout.text.toString().toLong()
...
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
long timeMs = 1000L*Long.parseLong(timeout.getText().toString());
dpm.setMaximumTimeToLock(deviceAdminSample, timeMs);

আপনি প্রোগ্রামগতভাবে ডিভাইসটিকে অবিলম্বে লক করতে বলতে পারেন:

কোটলিন

private lateinit var dpm: DevicePolicyManager
dpm.lockNow()

জাভা

DevicePolicyManager dpm;
dpm.lockNow();

ডেটা মুছা সঞ্চালন

আপনি ডিভাইসটি ফ্যাক্টরি সেটিংসে পুনরায় সেট করতে DevicePolicyManager পদ্ধতি wipeData() ব্যবহার করতে পারেন। ডিভাইসটি হারিয়ে গেলে বা চুরি হয়ে গেলে এটি কার্যকর। প্রায়শই ডিভাইসটি মুছে ফেলার সিদ্ধান্তটি নির্দিষ্ট শর্ত পূরণের ফলাফল। উদাহরণ স্বরূপ, আপনি setMaximumFailedPasswordsForWipe() ব্যবহার করতে পারেন যে নির্দিষ্ট সংখ্যক পাসওয়ার্ড চেষ্টার পর একটি ডিভাইস মুছে ফেলা উচিত।

আপনি নিম্নলিখিত হিসাবে ডেটা মুছা:

কোটলিন

private lateinit var dpm: DevicePolicyManager
dpm.wipeData(0)

জাভা

DevicePolicyManager dpm;
dpm.wipeData(0);

wipeData() পদ্ধতিটি অতিরিক্ত বিকল্পগুলির একটি বিট মাস্ক হিসাবে এর প্যারামিটার হিসাবে নেয়। বর্তমানে মান 0 হতে হবে।

ক্যামেরা নিষ্ক্রিয় করুন

অ্যান্ড্রয়েড 4.0 দিয়ে শুরু করে, আপনি ক্যামেরাটি অক্ষম করতে পারেন। মনে রাখবেন এটি একটি স্থায়ী অক্ষম হতে হবে না. প্রসঙ্গ, সময় ইত্যাদির উপর ভিত্তি করে ক্যামেরাটি গতিশীলভাবে সক্রিয়/অক্ষম করা যেতে পারে।

setCameraDisabled() পদ্ধতি ব্যবহার করে ক্যামেরা নিষ্ক্রিয় করা হয়েছে কিনা তা আপনি নিয়ন্ত্রণ করেন। উদাহরণস্বরূপ, এই স্নিপেট ক্যামেরাটিকে একটি চেকবক্স সেটিং এর উপর ভিত্তি করে সক্ষম বা নিষ্ক্রিয় করতে সেট করে:

কোটলিন

private lateinit var disableCameraCheckbox: CheckBoxPreference
private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked)

জাভা

private CheckBoxPreference disableCameraCheckbox;
DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setCameraDisabled(deviceAdminSample, mDisableCameraCheckbox.isChecked());

স্টোরেজ এনক্রিপশন

অ্যান্ড্রয়েড 3.0 থেকে শুরু করে, আপনি স্টোরেজ এলাকার এনক্রিপশন প্রয়োজন এমন একটি নীতি সেট করতে setStorageEncryption() পদ্ধতি ব্যবহার করতে পারেন, যেখানে সমর্থিত।

উদাহরণ স্বরূপ:

কোটলিন

private lateinit var dpm: DevicePolicyManager
private lateinit var deviceAdminSample: ComponentName
...
dpm.setStorageEncryption(deviceAdminSample, true)

জাভা

DevicePolicyManager dpm;
ComponentName deviceAdminSample;
...
dpm.setStorageEncryption(deviceAdminSample, true);

স্টোরেজ এনক্রিপশন কীভাবে সক্ষম করবেন তার সম্পূর্ণ উদাহরণের জন্য ডিভাইস প্রশাসন API নমুনা দেখুন।

অতিরিক্ত কোড নমুনা

Android AppRestrictionEnforcer এবং DeviceOwner নমুনাগুলি এই পৃষ্ঠায় কভার করা APIগুলির ব্যবহার আরও প্রদর্শন করে৷