需求是統(tǒng)計(jì)app使用時(shí)長(zhǎng),要求在按home鍵的時(shí)候也算一次完成的使用記錄。剛開(kāi)始打算采用監(jiān)聽(tīng)home鍵點(diǎn)擊,尋求的方法是監(jiān)聽(tīng)系統(tǒng)廣播。
class InnerRecevier extends BroadcastReceiver {
final String SYSTEM_DIALOG_REASON_KEY = "reason";
final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
@Override
public void onReceive(Context context, Intent intent){
String action = intent.getAction();
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) {
String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
if (reason != null) {
if (mListener != null){
if (reason.equals(SYSTEM_DIALOG_REASON_HOME_KEY)){
// 短按home鍵
mListener.onHomePressed();
}else if (reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)){
// 長(zhǎng)按home鍵
mListener.onHomeLongPressed();
}
}
}
}
}
可以實(shí)現(xiàn)監(jiān)聽(tīng)home鍵被點(diǎn)擊,但有一個(gè)弊端就是點(diǎn)擊home鍵app切換到后臺(tái)后,在使用別的app點(diǎn)擊home鍵 自己的app還是會(huì)收到這個(gè)廣播,因?yàn)檫@是系統(tǒng)級(jí)的廣播,這里處理邏輯就比較麻煩,要寫(xiě)一些判斷等,還有另外一種可以直接監(jiān)聽(tīng)app切換前后臺(tái),采用下面這種方式能簡(jiǎn)單完美解決我的需求。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-509294.html
private int activityAount = 0;//當(dāng)前Acitity個(gè)數(shù)
private boolean inItOnlineTime= true;//是否重新計(jì)時(shí)app在線時(shí)間
/**
* Activity 生命周期監(jiān)聽(tīng),用于監(jiān)控app前后臺(tái)狀態(tài)切換
*/
ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(Activity activity) {
activityAount++;
if(inItOnlineTime){
//app切換到前臺(tái)了,重新計(jì)時(shí)
createAppOnlineTime();
inItOnlineTime = false;
}
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
activityAount--;
if (activityAount == 0) {
//app切換到后臺(tái)了,提交時(shí)間數(shù)據(jù)
postAppOnlineTime();
inItOnlineTime = true;
}
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
//注冊(cè)這個(gè)監(jiān)聽(tīng)
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
把上面代碼寫(xiě)在Application中,在Application的onCreate的方法中注冊(cè)監(jiān)聽(tīng),在使用app的時(shí)候無(wú)論在任何頁(yè)面當(dāng)點(diǎn)擊home鍵的時(shí)候都會(huì)觸發(fā)監(jiān)聽(tīng),點(diǎn)擊返回鍵退出app 和menu鍵也會(huì)觸發(fā)app切換到后臺(tái)的監(jiān)聽(tīng)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-509294.html
到了這里,關(guān)于android 監(jiān)聽(tīng)app前后臺(tái)切換的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!