之前测试Android续航的时候,需要自动计算开始跑测试到低电关机的续航时长,这时候就要用到关机广播了。主要的思路是,开始测试时,记录开始测试的时间点t0,在收到关机广播的时候,记录时间t1,计算t1-t0后,得出续航时长。
这个时候,就需要用到关机广播了。
1、首先,需要在AndroidMenifest.xml文件中给apk添加监听广播的权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2、随后,需要在AndroidMenifest.xml文件中注册一下监听器
<receiver android:name="com.meitutest.testrom.broadcast.ShutdownBroadcast">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
</intent-filter>
</receiver>
3、最后,编写一个继承BroadcastReceiver的类,接收系统的关闭广播,并在方法中写我们要做的事情。
package com.meitutest.testrom.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.meitutest.testrom.auto.TestReport;
import java.text.SimpleDateFormat;
public class ShutdownBroadcast extends BroadcastReceiver {
public static String xsl_path="";
public static int sumSleeptime=0;
public static long startTime=0;
public static String current_item_string="";
private SimpleDateFormat sDateFormat = new SimpleDateFormat("HH:mm:ss");
@Override
public void onReceive(Context context, Intent intent) {
//接收到广播后,需要做的事情
String timeValue=getDatePoor(startTime,System.currentTimeMillis());
TestReport.i("ShutdownBroadcast",timeValue+"(含休眠"+sumSleeptime+"min)");
ExcelUtil.writeSheetAndCellContent(xsl_path,new String[]{
sDateFormat.format(new java.util.Date()),
current_item_string+"(自动关机)",
"续航:",
timeValue+"(含休眠"+sumSleeptime+"min)"});
}
private String getDatePoor(long startDate, long nowDate) {
long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60;
long nm = 1000 * 60;
long ns = 1000;
// 获得两个时间的毫秒时间差异
long diff = nowDate - startDate;
// long diff = startDate - nowDate;
// 计算差多少天
long day = diff / nd;
// 计算差多少小时
long hour = diff % nd / nh;
// 计算差多少分钟
long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果
long sec = diff % nd % nh % nm / ns;
// return day + "天" + hour + "小时" + min + "分钟"+sec+"秒";
String hourString = "",minString = "",secString = "";
if (hour<10){
hourString="0"+hour;
}else{
hourString=""+hour;
}
if (min<10){
minString="0"+min;
}else{
minString=""+min;
}
if (sec<10){
secString="0"+sec;
}else{
secString=""+sec;
}
return hourString + ":" + minString + ":"+secString+"";
}
}