android9.0模拟器 实现监听开机、关机事件

1.创建一个名为 PowerStatusService 的类,继承自 JobIntentService:

import android.app.job.JobParameters;
import android.app.job.JobService;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.PowerManager;
import android.util.Log;

public class PowerStatusService extends JobIntentService {

    private static final String TAG = "PowerStatusService";

    // 假设这是你的服务器地址
    private static final String SERVER_URL = "http://your_server_endpoint";

    // 在这里替换为你的设备的IP地址和SN码
    private static final String DEVICE_IP = "your_device_ip";
    private static final String DEVICE_SN = "your_device_sn";

    // 定义一些常量,表示服务的操作
    private static final int JOB_ID = 1000;
    private static final String ACTION_SEND_STATUS = "com.example.action.SEND_STATUS";

    // 在这里定义一些其他参数,以供需要时使用

    // 启动服务
    public static void enqueueWork(Context context, Intent work) {
        enqueueWork(context, PowerStatusService.class, JOB_ID, work);
    }

    @Override
    protected void onHandleWork(Intent intent) {
        if (intent != null) {
            final String action = intent.getAction();
            if (ACTION_SEND_STATUS.equals(action)) {
                handleSendStatus();
            }
        }
    }

    private void handleSendStatus() {
        // 获取设备开关机状态
        PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
        boolean isDeviceOn = powerManager.isInteractive();

        // 在这里添加你发送请求的代码
        // 使用 AsyncTask 或其他异步方式发送请求

        // 示例异步任务
        new SendStatusTask().execute(DEVICE_IP, DEVICE_SN, String.valueOf(isDeviceOn));
    }

    private static class SendStatusTask extends AsyncTask<String, Void, Void> {
        @Override
        protected Void doInBackground(String... params) {
            // 在这里执行网络请求,向服务器发送设备状态信息
            // params[0] 是设备IP,params[1] 是设备SN码,params[2] 是开关机状态
            String deviceIp = params[0];
            String deviceSn = params[1];
            String powerStatus = params[2];

            // 发送网络请求的代码在这里添加

            Log.d(TAG, "Sending power status to server: " + deviceIp + ", " + deviceSn + ", " + powerStatus);
            return null;
        }
    }
}

2.在你的 AndroidManifest.xml 文件中注册服务:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>    
<uses-permission android:name="android.permission.INTERNET" />
<application>
        <service
            android:name=".PowerStatusService"
            android:permission="android.permission.BIND_JOB_SERVICE" />
        <receiver
            android:name=".BootReceiver"
            android:enabled="true"
            android:exported="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />

                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.ACTION_SHUTDOWN" />
            </intent-filter>
        </receiver>
</application>

3.创建一个广播接收器(BootReceiver):

package com.example.pose;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class BootReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("接收到服务了");
        if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
            System.out.println("开机");
            // 当设备开机时启动服务
            Intent serviceIntent = new Intent(context, PowerStatusService.class);
            serviceIntent.setAction(PowerStatusService.ACTION_SEND_STATUS);
            PowerStatusService.enqueueWork(context, serviceIntent);
        } else if (Intent.ACTION_SHUTDOWN.equals(intent.getAction())) {
            System.out.println("关机");
            // 当设备关机时启动服务
            Intent serviceIntent = new Intent(context, PowerStatusService.class);
            serviceIntent.setAction(PowerStatusService.ACTION_SEND_STATUS);
            PowerStatusService.enqueueWork(context, serviceIntent);
        }
    }


}

  1. 使用adb命令实现模拟开机、关机事件:
开机:adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.pose   
关机:adb shell am broadcast -a android.intent.action.ACTION_SHUTDOWN -p com.example.pose  
  1. 查看logcat:


    image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容