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

Cách bật/tắt màn hình Android theo chương trình

Giới thiệu

Hướng dẫn này minh họa cách bật và tắt màn hình thiết bị Android theo chương trình (programmatically) bằng cách sử dụng DevicePolicyManager và quyền quản trị thiết bị (Device Admin).

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

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

Mở Android Studio, chọn File → New Project và điền thông tin cần thiết.

Bước 2: Thiết kế giao diện (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: Tạo file chính sách (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: Tạo 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, "Đã kích hoạt", Toast.LENGTH_SHORT).show();
    }

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

Bước 5: Viết code MainActivity

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 androidx.annotation.Nullable;
import androidx.appcompat.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 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);
        
        boolean active = deviceManager.isAdminActive(compName);
        if (active) {
            btnEnable.setText("Vô hiệu hóa");
            btnLock.setVisibility(View.VISIBLE);
        } else {
            btnEnable.setText("Kích hoạt");
            btnLock.setVisibility(View.GONE);
        }
    }

    public void enablePhone(View view) {
        boolean active = deviceManager.isAdminActive(compName);
        if (active) {
            deviceManager.removeActiveAdmin(compName);
            btnEnable.setText("Kích hoạt");
            btnLock.setVisibility(View.GONE);
        } 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 nên kích hoạt ứng dụng này!");
            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);
        switch (requestCode) {
            case RESULT_ENABLE:
                if (resultCode == Activity.RESULT_OK) {
                    btnEnable.setText("Vô hiệu hóa");
                    btnLock.setVisibility(View.VISIBLE);
                } else {
                    Toast.makeText(getApplicationContext(), "Thất bại!", Toast.LENGTH_SHORT).show();
                }
                return;
        }
    }
}

Bước 6: Cấu hình 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ị Android thật, chạy ứng dụng từ Android Studio. Nhấn "Kích hoạt" để cấp quyền Device Admin, sau đó nhấn "Khóa màn hình" để tắt màn hình.

Cách bật/tắt màn hình Android theo chương trình