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

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

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

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

দ্রষ্টব্য: Android for Work ডেপ্লয়মেন্টের জন্য একটি ওয়ার্ক পলিসি কন্ট্রোলার তৈরি করার তথ্যের জন্য, "Build a Device Policy Controller" দেখুন।

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

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

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

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

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

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

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

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

আপনি ডিভাইস অ্যাডমিনিস্ট্রেশন এপিআই ব্যবহার করে ডিভাইস অ্যাডমিন অ্যাপ তৈরি করেন, যা ব্যবহারকারীরা তাদের ডিভাইসে ইনস্টল করে। এই ডিভাইস অ্যাডমিন অ্যাপটি কাঙ্ক্ষিত নীতিমালা প্রয়োগ করে। এটি যেভাবে কাজ করে তা নিচে দেওয়া হলো:

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

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

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

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

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

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

নীতিমালা

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

সারণি ১. ডিভাইস অ্যাডমিনিস্ট্রেশন এপিআই দ্বারা সমর্থিত নীতিমালাসমূহ।

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

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

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

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

নমুনা অ্যাপ

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

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

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

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

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

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

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

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

  • 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>

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

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

কোডটি বাস্তবায়ন করা হচ্ছে

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

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' চেকবক্সটিতে ক্লিক করেন।

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

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

নিচে সেই কোডটি দেওয়া হলো যা ব্যবহারকারী 'Enable Admin' চেকবক্সে ক্লিক করলে এক্সিকিউট হয়। এর ফলে onPreferenceChange() কলব্যাকটি ট্রিগার হয়। এই কলব্যাকটি তখন কল করা হয় যখন ব্যবহারকারী এই Preference মান পরিবর্তন করেন এবং এটি সেট এবং/অথবা পারসিস্ট করার জন্য প্রস্তুত হয়। যদি ব্যবহারকারী অ্যাপটি এনাবল করেন, তাহলে ডিসপ্লে পরিবর্তিত হয়ে ব্যবহারকারীকে ডিভাইস অ্যাডমিন অ্যাপটি অ্যাক্টিভেট করার জন্য প্রম্পট করে, যেমনটি চিত্র ২-এ দেখানো হয়েছে। অন্যথায়, ডিভাইস অ্যাডমিন অ্যাপটি ডিজেবল করা থাকে।

কোটলিন

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 কম্পোনেন্ট) হলো টার্গেট পলিসি। এই লাইনটি চিত্র ২-এ দেখানো ইউজার ইন্টারফেসটি চালু করে, যা ব্যবহারকারীদের সিস্টেমে ডিভাইস অ্যাডমিনিস্ট্রেটরকে যুক্ত করার প্রক্রিয়াটি ধাপে ধাপে বুঝিয়ে দেয় (অথবা এটি প্রত্যাখ্যান করার সুযোগ দেয়)।

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

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

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

কোটলিন

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 সংখ্যক বড় হাতের অক্ষর থাকতে হবে। পাসওয়ার্ডের বিষয়বস্তু সূক্ষ্মভাবে নিয়ন্ত্রণ করার মেথডগুলো নিচে দেওয়া হলো:

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

কোটলিন

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() মেথডটি ব্যবহার করতে পারেন। এই মেথডটি একটি length প্যারামিটার গ্রহণ করে, যা নির্দিষ্ট করে কতগুলো পুরোনো পাসওয়ার্ড সংরক্ষণ করা হবে। যখন এই পলিসিটি সক্রিয় থাকে, তখন ব্যবহারকারীরা শেষ 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);

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

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

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