我知道這是一個老問題,但希望這可以幫助某人。
在我的服務,我聽SCREEN_ON/SCREEN_OFF行動,抓住兩個時間之間的差異,並保存到的onDestroy回調中sharedpreferences。
BroadcastReceiver mybroadcast = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("[BroadcastReceiver]", "MyReceiver");
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
startTimer = System.currentTimeMillis();
}
else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){
endTimer = System.currentTimeMillis();
screenOnTime = endTimer - startTimer;
if(screenOnTime < TIME_ERROR) {
times.add(screenOnTime);
}
}
}
};
該服務在啓動時以及更換包時發現(我發現它有助於調試)。
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, ScreenOnService.class);
context.startService(i);
}
}
這裏是我對廣播接收機
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<data android:scheme="package" android:path="com.application.test" />
</intent-filter>
</receiver>
清單,我們不能保證服務一直在後臺運行。 – User9527