【Android】如何統(tǒng)計(jì)App啟動(dòng)次數(shù)预伺,首次安裝時(shí)間

結(jié)合這段時(shí)間的技術(shù)調(diào)研,做個(gè)總結(jié):


1.針對(duì)5.0以上的安卓系統(tǒng)虎谢,有系統(tǒng)API:可以使用android.app.usage.UsageStatsManager,閑話(huà)不多說(shuō)盟榴,直接po代碼如下:



? ?mUsageStatsManager= (UsageStatsManager).getSystemService(Context.USAGE_STATS_SERVICE);

? ?Calendar cal = Calendar.getInstance();

? ?cal.add(Calendar.YEAR, -1);


? List queryUsageStats = getUsageStatistics(1);

? PackageManager pm = getApplicationContext().getPackageManager();

for(inti =0; i < queryUsageStats.size(); i++) {

? ? ? ? ? ? UsageStats usageStats = queryUsageStats.get(i);

? ? ? ? ? ? ?Class c = usageStats.getClass();

try{

//mLaunchCount 我理解的它就是是app啟動(dòng)次數(shù),這是被@hide修飾的成員變量嘉冒。只能用反射得到它的值曹货。但是有個(gè)現(xiàn)象是,啟動(dòng)次不

//準(zhǔn)讳推,從桌面點(diǎn)進(jìn)去記數(shù)2顶籽,從后臺(tái)進(jìn)入記數(shù)1,時(shí)間間隔為一天银觅,總的統(tǒng)計(jì)次數(shù)也不準(zhǔn)確


? ? ? ? ? ? ? Field field = c.getDeclaredField("mLaunchCount");

? ? ? ? ? ? ? ?field.setAccessible(true);

? ? ? ? ? ? ? ?Field field1 = c.getDeclaredField("mBeginTimeStamp");

? ? ? ? ? ? ? ?field1.setAccessible(true);

? ? ? ? ? ? ? ?Field field2 = c.getDeclaredField("mEndTimeStamp");

? ? ? ? ? ? ? ?field2.setAccessible(true);

? ? ? ? ? ? ? ? ApplicationInfo applicationInfo = pm.getApplicationInfo(usageStats.getPackageName(), ? ? ? ? ? ? ? ? ?PackageManager.GET_META_DATA);

? ? ? ? ? ? ? ?String appName = pm.getApplicationLabel(applicationInfo).toString();

? ? ? ? ? ? ? ?PackageInfo packageInfo = pm.getPackageInfo(usageStats.getPackageName(),0);

//應(yīng)用首次裝時(shí)間

? ? ? ? ? ? ? ? longfirstInstallTime = packageInfo.firstInstallTime;

//格式化成年月日

? ? ? ? ? ? ? ? String firstInstallTime1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", firstInstallTime);

//應(yīng)用最后一次更新時(shí)間

? ? ? ? ? ? ? ?long lastUpdateTime = packageInfo.lastUpdateTime;

? ? ? ? ? ? ? ?String lastUpdateTime1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", lastUpdateTime);

? ? ? ? ? ? ? ? Log.i("應(yīng)用:"+usageStats.getPackageName(),"first install time : "+ firstInstallTime1 +" last update time :"+ lastUpdateTime1);

//這部分的時(shí)間礼饱,我沒(méi)有搞太明白,請(qǐng)自行驗(yàn)證

long firstTimeStamp = usageStats.getFirstTimeStamp();

String firstTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", firstTimeStamp);

long LastTimeStamp = usageStats.getLastTimeStamp();

String LastTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", LastTimeStamp);

long LastTimeUsed = usageStats.getLastTimeUsed();

String LastTimeUsed1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", LastTimeUsed);

long mBeginTimeStamp = field1.getLong(usageStats);

String mBeginTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", mBeginTimeStamp);

long mEndTimeStamp = field2.getLong(usageStats);

String mEndTimeStamp1 = transferLongToDate("yyyy-MM-dd HH:mm:ss", mEndTimeStamp);

//這部分的時(shí)間究驴,我沒(méi)有搞太明白镊绪,請(qǐng)自行驗(yàn)證

? ? ? ? ? ? ? ? Log.i("使用列表...field...","應(yīng)用名:"+ appName +"\n包名:"+ usageStats.getPackageName() +"\nfirstTimeStamp:"+ ? ? ? ? ? ? ? firstTimeStamp1

+"\nLastTimeStamp:"+ LastTimeStamp1 +"\nLastTimeUsed:"+ LastTimeUsed1

+",\n啟動(dòng)次數(shù):"+ field.getInt(usageStats)

+"洒忧,\nmBeginTimeStamp:"+mBeginTimeStamp1+"蝴韭,\nmEndTimeStamp:"+mEndTimeStamp1);

}catch(Exception e) {

? ? ? ? ? ? ? ?e.printStackTrace();

}

}


publicList getUsageStatistics(intintervalType) {// Get the app statistics since one year ago from the current time.

Calendar cal = Calendar.getInstance();

cal.add(Calendar.YEAR, -1);

List queryUsageStats =mUsageStatsManager

.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, cal.getTimeInMillis(),

System.currentTimeMillis());

if(queryUsageStats.size() ==0) {

Log.i("使用列表...","The user may not allow the access to apps usage. ");

Toast.makeText(MainActivity.this,

getString(R.string.action_settings),

Toast.LENGTH_LONG).show();

//? ? ? ? ? ? mOpenUsageSettingButton.setVisibility(View.VISIBLE);

//? ? ? ? ? ? mOpenUsageSettingButton.setOnClickListener(new View.OnClickListener() {

//? ? ? ? ? ? ? ? @Override? ? ? ? ? ? ? ? public void onClick(View v) {

//? ? ? ? ? ? ? ? ? ? startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

//? ? ? ? ? ? ? ? }

//? ? ? ? ? ? });

startActivity(newIntent(Settings.ACTION_USAGE_ACCESS_SETTINGS));

}

returnqueryUsageStats;

}


關(guān)于5.0以上系統(tǒng)統(tǒng)計(jì)啟動(dòng)次數(shù),系統(tǒng)提供API不準(zhǔn)熙侍,如果不在第三方應(yīng)用植入自己的sdk,統(tǒng)計(jì)第三方應(yīng)用的啟動(dòng)次數(shù)不靠譜榄鉴,但是要收集安裝時(shí)間是可以的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛉抓,一起剝皮案震驚了整個(gè)濱河市庆尘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巷送,老刑警劉巖驶忌,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笑跛,居然都是意外死亡付魔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)堡牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抒抬,“玉大人,你說(shuō)我怎么就攤上這事晤柄。” “怎么了妖胀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵芥颈,是天一觀(guān)的道長(zhǎng)惠勒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)爬坑,這世上最難降的妖魔是什么纠屋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮盾计,結(jié)果婚禮上售担,老公的妹妹穿的比我還像新娘。我一直安慰自己署辉,他們只是感情好族铆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著哭尝,像睡著了一般哥攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上材鹦,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天逝淹,我揣著相機(jī)與錄音,去河邊找鬼桶唐。 笑死栅葡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的尤泽。 我是一名探鬼主播欣簇,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼安吁!你這毒婦竟也來(lái)了醉蚁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鬼店,失蹤者是張志新(化名)和其女友劉穎网棍,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體妇智,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滥玷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了巍棱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惑畴。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖航徙,靈堂內(nèi)的尸體忽然破棺而出如贷,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布杠袱,位于F島的核電站尚猿,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏楣富。R本人自食惡果不足惜凿掂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纹蝴。 院中可真熱鬧庄萎,春花似錦、人聲如沸塘安。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耙旦。三九已至脱羡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間免都,已是汗流浹背锉罐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绕娘,地道東北人脓规。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像险领,于是被迫代替她去往敵國(guó)和親侨舆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容