之前測試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+"";
}
}