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);
}
}
}
- 使用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
-
查看logcat:
image.png