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

ডিভাইস অ্যাডমিন অবচয় । অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) থেকে শুরু করে, ডিভাইস অ্যাডমিন কর্তৃক প্ররোচিত হলে কিছু অ্যাডমিন নীতি অবচয় হিসেবে চিহ্নিত করা হবে। আমরা আপনাকে এই পরিবর্তনের জন্য এখনই প্রস্তুতি শুরু করার পরামর্শ দিচ্ছি। আরও জানতে এবং মাইগ্রেশন বিকল্পগুলি দেখতে, ডিভাইস অ্যাডমিন অবচয় পড়ুন।

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

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

দ্রষ্টব্য: কাজের জন্য অ্যান্ড্রয়েডের জন্য একটি কাজের নীতি নিয়ন্ত্রক তৈরির তথ্যের জন্য, একটি ডিভাইস নীতি নিয়ন্ত্রক তৈরি করুন দেখুন।

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

অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) হেডলেস সিস্টেম ইউজার মোড (যেসব ডিভাইসে UserManager.isHeadlessSystemUserMode true রিটার্ন করে) প্রবর্তন করে। হেডলেস সিস্টেম ইউজার মোডে, সিস্টেম ব্যবহারকারী একজন ব্যাকগ্রাউন্ড ব্যবহারকারী এবং এন্ড-ইউজার ইন্টারঅ্যাকশনের জন্য অতিরিক্ত ফোরগ্রাউন্ড ব্যবহারকারীদের উপর নির্ভর করে। অ্যান্ড্রয়েড ১৪ একটি হেডলেস ডিভাইস ওনার অ্যাফিলিয়েট মোডও প্রবর্তন করে, যা ডিভাইস ওনার সেট করা সিস্টেম ব্যবহারকারী ব্যতীত সমস্ত অ্যাফিলিয়েট ব্যবহারকারীদের জন্য একটি প্রোফাইল ওনার যোগ করে।

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

অ্যান্ড্রয়েড ডিভাইস নির্মাতারা source.android.com-এ প্রকাশিত নির্দেশিকাটি দেখতে পারেন।

ডিভাইস অ্যাডমিনিস্ট্রেশন API ওভারভিউ

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

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

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

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

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

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

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

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

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

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

নীতিমালা

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

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

নীতি বিবরণ
পাসওয়ার্ড সক্ষম করা হয়েছে ডিভাইসগুলিকে পিন বা পাসওয়ার্ড জিজ্ঞাসা করতে হবে।
সর্বনিম্ন পাসওয়ার্ডের দৈর্ঘ্য পাসওয়ার্ডের জন্য প্রয়োজনীয় সংখ্যক অক্ষর সেট করুন। উদাহরণস্বরূপ, আপনি কমপক্ষে ছয়টি অক্ষরের পিন বা পাসওয়ার্ড চাইতে পারেন।
বর্ণানুক্রমিক পাসওয়ার্ড প্রয়োজন পাসওয়ার্ডগুলিতে অক্ষর এবং সংখ্যার সংমিশ্রণ থাকা আবশ্যক। এতে প্রতীকী অক্ষর থাকতে পারে।
জটিল পাসওয়ার্ড প্রয়োজন পাসওয়ার্ডে কমপক্ষে একটি অক্ষর, একটি সংখ্যাসূচক সংখ্যা এবং একটি বিশেষ প্রতীক থাকা আবশ্যক। অ্যান্ড্রয়েড 3.0-এ প্রবর্তিত।
পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম অক্ষর সকল অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম অক্ষরের সংখ্যা। অ্যান্ড্রয়েড ৩.০-এ প্রবর্তিত।
পাসওয়ার্ডে ন্যূনতম ছোট হাতের অক্ষর আবশ্যক সকল অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম ছোট হাতের অক্ষরের সংখ্যা। অ্যান্ড্রয়েড ৩.০-এ প্রবর্তিত।
পাসওয়ার্ডে ন্যূনতম অ-অক্ষর অক্ষর প্রয়োজন সমস্ত অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় অক্ষরবিহীন অক্ষরের ন্যূনতম সংখ্যা। অ্যান্ড্রয়েড 3.0-এ প্রবর্তিত।
পাসওয়ার্ডে ন্যূনতম সংখ্যাসূচক সংখ্যা প্রয়োজন সকল অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম সংখ্যাসূচক সংখ্যা। অ্যান্ড্রয়েড ৩.০-এ প্রবর্তিত।
পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম প্রতীক সকল অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম সংখ্যক প্রতীক। অ্যান্ড্রয়েড ৩.০-এ প্রবর্তিত।
পাসওয়ার্ডে ন্যূনতম বড় হাতের অক্ষর আবশ্যক সকল অ্যাডমিন বা নির্দিষ্ট কোনও অ্যাডমিনের পাসওয়ার্ডে প্রয়োজনীয় ন্যূনতম কতগুলি বড় হাতের অক্ষর। অ্যান্ড্রয়েড ৩.০-এ প্রবর্তিত।
পাসওয়ার্ডের মেয়াদ শেষ হওয়ার সময়সীমা পাসওয়ার্ডের মেয়াদ শেষ হওয়ার সময়, ডিভাইস অ্যাডমিন যখন মেয়াদ শেষ হওয়ার সময় নির্ধারণ করে তখন থেকে মিলিসেকেন্ডে ডেল্টা হিসাবে প্রকাশ করা হয়। অ্যান্ড্রয়েড 3.0 এ প্রবর্তিত।
পাসওয়ার্ড ইতিহাসের সীমাবদ্ধতা এই নীতি ব্যবহারকারীদের শেষ n টি অনন্য পাসওয়ার্ড পুনঃব্যবহার করতে বাধা দেয়। এই নীতিটি সাধারণত setPasswordExpirationTimeout() এর সাথে ব্যবহার করা হয়, যা ব্যবহারকারীদের নির্দিষ্ট সময় অতিবাহিত হওয়ার পরে তাদের পাসওয়ার্ড আপডেট করতে বাধ্য করে। Android 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 হিসাবে অবস্থিত।

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

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

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

একটি ডিভাইস প্রশাসন অ্যাপ তৈরি করা হচ্ছে

সিস্টেম অ্যাডমিনিস্ট্রেটররা ডিভাইস অ্যাডমিনিস্ট্রেশন 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>

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

ম্যানিফেস্ট ফাইল সম্পর্কে আরও আলোচনার জন্য, অ্যান্ড্রয়েড ডেভেলপার গাইড দেখুন।

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

ডিভাইস অ্যাডমিনিস্ট্রেশন API-তে নিম্নলিখিত ক্লাসগুলি অন্তর্ভুক্ত রয়েছে:

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 ইন্টেন্টকে ট্রিগার করে। নমুনা অ্যাপে, ব্যবহারকারী যখন অ্যাডমিন সক্ষম করুন চেকবক্সে ক্লিক করেন তখন এটি ঘটে।

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

চিত্র ২. নমুনা অ্যাপ: অ্যাপ সক্রিয় করা

ব্যবহারকারী যখন Enable Admin চেকবক্সে ক্লিক করেন তখন কোডটি কার্যকর করা হয়। এর ফলে 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 ডিভাইস পাসওয়ার্ড নীতি সেট এবং প্রয়োগের জন্য API অন্তর্ভুক্ত করে। ডিভাইস অ্যাডমিনিস্ট্রেশন 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);
পাসওয়ার্ড কন্টেন্টের প্রয়োজনীয়তা সেট করুন

অ্যান্ড্রয়েড ৩.০ থেকে শুরু করে, 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);
পাসওয়ার্ডের মেয়াদ শেষ হওয়ার সময়সীমা সেট করুন

অ্যান্ড্রয়েড ৩.০ থেকে শুরু করে, আপনি 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);
ইতিহাসের উপর ভিত্তি করে পাসওয়ার্ড সীমাবদ্ধ করুন

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

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

কোটলিন

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 হতে হবে।

ক্যামেরা বন্ধ করুন

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

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());

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

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

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

কোটলিন

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

জাভা

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

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

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

অ্যান্ড্রয়েড অ্যাপরেস্ট্রিকশনএনফোর্সার এবং ডিভাইসওনার নমুনাগুলি এই পৃষ্ঠায় বর্ণিত API গুলির ব্যবহার আরও প্রদর্শন করে।