डिवाइस एडमिन API से स्क्रीन लॉक करना
यह उदाहरण दर्शाता है कि DevicePolicyManager और डिवाइस एडमिन रिसीवर का उपयोग करके एंड्रॉइड डिवाइस को प्रोग्रामेटिकली कैसे लॉक करें। इसके लिए यूजर को ऐप को डिवाइस एडमिन के रूप में इनेबल करना होगा।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: लेआउट XML (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="16dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal">
<Button
android:id="@+id/btnEnable"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="enablePhone"
android:text="इनेबल" />
<Button
android:id="@+id/btnLock"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="lockPhone"
android:text="लॉक" />
</LinearLayout>
</RelativeLayout>
चरण 3: डिवाइस एडमिन पॉलिसी (res/xml/policies.xml)
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="https://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
चरण 4: DeviceAdminReceiver क्लास
package app.tutorialspoint.com.sample;
import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class DeviceAdmin extends DeviceAdminReceiver {
@Override
public void onEnabled(Context context, Intent intent) {
super.onEnabled(context, intent);
Toast.makeText(context, "इनेबल किया गया", Toast.LENGTH_SHORT).show();
}
@Override
public void onDisabled(Context context, Intent intent) {
super.onDisabled(context, intent);
Toast.makeText(context, "डिसेबल किया गया", Toast.LENGTH_SHORT).show();
}
}
चरण 5: MainActivity.java
package app.tutorialspoint.com.sample;
import android.app.Activity;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
static final int RESULT_ENABLE = 1;
DevicePolicyManager deviceManager;
ComponentName compName;
Button btnEnable, btnLock;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnEnable = findViewById(R.id.btnEnable);
btnLock = findViewById(R.id.btnLock);
deviceManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
compName = new ComponentName(this, DeviceAdmin.class);
updateButtonState();
}
private void updateButtonState() {
boolean active = deviceManager.isAdminActive(compName);
if (active) {
btnEnable.setText("डिसेबल");
btnLock.setVisibility(View.VISIBLE);
} else {
btnEnable.setText("इनेबल");
btnLock.setVisibility(View.GONE);
}
}
public void enablePhone(View view) {
boolean active = deviceManager.isAdminActive(compName);
if (active) {
deviceManager.removeActiveAdmin(compName);
updateButtonState();
} else {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "ऐप को इनेबल करें!");
startActivityForResult(intent, RESULT_ENABLE);
}
}
public void lockPhone(View view) {
deviceManager.lockNow();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_ENABLE) {
if (resultCode == Activity.RESULT_OK) {
updateButtonState();
} else {
Toast.makeText(this, "विफल!", Toast.LENGTH_SHORT).show();
}
}
}
}
चरण 6: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="app.tutorialspoint.com.sample">
<uses-permission android:name="android.permission.CALL_PHONE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver
android:name=".DeviceAdmin"
android:description="@string/app_description"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/policies" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
</application>
</manifest>
महत्वपूर्ण नोट्स
- Android 10 (API 29)+ पर डिवाइस एडमिन API डिप्रिकेटेड है। एंटरप्राइज यूज केस के लिए Android Management API या WorkProfile का उपयोग करें।
- यूजर को सेटिंग्स में जाकर मैन्युअली "डिवाइस एडमिन ऐप्स" में ऐप को इनेबल करना पड़ता है।
lockNow()तुरंत स्क्रीन लॉक करता है और कीगार्ड दिखाता है।
आउटपुट
"इनेबल" बटन दबाने पर सिस्टम डायलॉग खुलेगा। इनेबल होने के बाद "लॉक" बटन दिखेगा, जिसे दबाने पर डिवाइस लॉक हो जाएगा।
