Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách khóa màn hình thiết bị Android bằng lập trình?

Giới thiệu

Hướng dẫn khóa màn hình thiết bị Android lập trình qua Device Administration API. Yêu cầu người dùng cấp quyền Device Admin cho ứng dụng.

Các bước thực hiện

Bước 1: Tạo dự án mới

Tạo project Android Studio.

Bước 2: Giao diện với 2 nút (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="Kích hoạt" />
        <Button
            android:id="@+id/btnLock"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="lockPhone"
            android:text="Khóa màn hình" />
    </LinearLayout>
</RelativeLayout>

Bước 3: Chính sách Device Admin (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>

Bước 4: Broadcast Receiver xử lý sự kiện Admin (src/DeviceAdmin.java)

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, "Đã kích hoạt Device Admin", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        super.onDisabled(context, intent);
        Toast.makeText(context, "Đã vô hiệu hóa Device Admin", Toast.LENGTH_SHORT).show();
    }
}

Bước 5: MainActivity xử lý logic (src/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.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    static final int RESULT_ENABLE = 1;
    DevicePolicyManager devicePolicyManager;
    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);
        devicePolicyManager = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        compName = new ComponentName(this, DeviceAdmin.class);

        boolean active = devicePolicyManager.isAdminActive(compName);
        updateUI(active);
    }

    public void enablePhone(View view) {
        boolean active = devicePolicyManager.isAdminActive(compName);
        if (active) {
            devicePolicyManager.removeActiveAdmin(compName);
            updateUI(false);
        } else {
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, compName);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Bạn cần kích hoạt ứng dụng để khóa màn hình!");
            startActivityForResult(intent, RESULT_ENABLE);
        }
    }

    public void lockPhone(View view) {
        devicePolicyManager.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) {
                updateUI(true);
            } else {
                Toast.makeText(getApplicationContext(), "Kích hoạt thất bại!", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void updateUI(boolean active) {
        if (active) {
            btnEnable.setText("Vô hiệu hóa");
            btnLock.setVisibility(View.VISIBLE);
        } else {
            btnEnable.setText("Kích hoạt");
            btnLock.setVisibility(View.GONE);
        }
    }
}

Bước 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>

Chạy ứng dụng

Kết nối thiết bị thật (không chạy được trên emulator nếu không bật Device Admin), nhấn Run. Nhấn "Kích hoạt" → chấp nhận yêu cầu Device Admin → nhấn "Khóa màn hình" để khóa thiết bị ngay lập tức.

Cách khóa màn hình thiết bị Android bằng lập trình?

Lưu ý quan trọng

  • Cần quyền BIND_DEVICE_ADMIN và khai báo receiver trong manifest
  • Người dùng phải đồng ý cấp quyền Device Admin qua hộp thoại hệ thống
  • Từ Android 10+, một số API Device Admin bị hạn chế, cân nhắc dùng DevicePolicyManager.lockNow() kết hợp với các API quản trị mới
  • Gỡ ứng dụng: Vào Cài đặt → Bảo mật → Quản trị thiết bị → Bỏ chọn app → Gỡ cài đặt