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

ডিভাইস অ্যাডমিন অবচয় অ্যান্ড্রয়েড 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গুলির ব্যবহার আরও প্রদর্শন করে৷

,

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

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

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

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

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

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

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

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

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

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

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

কোটলিন

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

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

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

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

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

,

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

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

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

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

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

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

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

অ্যান্ড্রয়েড ডিভাইস নির্মাতারা উত্স.অ্যান্ড্রয়েড.কম এ প্রকাশিত গাইডেন্সকে উল্লেখ করতে পারে।

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

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

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

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

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

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

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

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

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

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

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

নীতিমালা

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

সারণী 1. ডিভাইস প্রশাসন এপিআই দ্বারা সমর্থিত নীতিগুলি।

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

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

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

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

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

এই পৃষ্ঠায় ব্যবহৃত উদাহরণগুলি ডিভাইস অ্যাডমিনিস্ট্রেশন এপিআই নমুনার উপর ভিত্তি করে তৈরি করা হয়েছে, যা এসডিকে নমুনাগুলিতে অন্তর্ভুক্ত রয়েছে (অ্যান্ড্রয়েড এসডিকে ম্যানেজারের মাধ্যমে উপলব্ধ) এবং আপনার সিস্টেমে <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

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

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

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

একটি ডিভাইস প্রশাসন অ্যাপ বিকাশ

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

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

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

  • 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 এপিআই ব্যবহার করেন একটি ডিভাইস অ্যাডমিন অ্যাপ্লিকেশন লিখতে।

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

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

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

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

কোটলিন

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

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

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

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

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