終於在stackoverflow找個乙個大神的回答讀取android下proc的資料夾獲取程序的相關資訊。雖然之前看到過這個大神的獲取正在執行的程序列表但是獲取的是列表,不能判斷哪乙個程序是當然顯示的應用,用於判斷的foreground引數能返回多個true的情況。這個大神又在回答這個問題放出獲取當前應用的**。貼一下**:
public
static
final
int
10000
;
/** offset for uid ranges for each user */
public
static
final
int
aid_user =
100000
;
public
static
file files =
new
file(
"/proc"
).listfiles();
int
lowestoomscore = integer.max_value;
string foregroundprocess =
null
;
for
(file file : files)
int
pid;
try
catch
(numberformatexception e)
try
else
if
(lines.length==
3
)
else
if
(!cpuaccctsubsystem.endswith(integer.tostring(pid)))
if
(cpusubsystem.endswith(
"bg_non_interactive"
))
string cmdline = read(string.format(
"/proc/%d/cmdline"
, pid));
if
(cmdline.contains(
"com.android.systemui"
))
int
uid = integer.parseint(
cpuaccctsubsystem.split(
":"
)[
2
].split(
"/"
)[
1
].replace(
"uid_"
,
""
));
if
(uid >=
1000
&& uid <=
1038
)
int
int
userid =
0
;
// loop until we get the correct user id.
// 100000 is the offset for each user.
while
userid++;
}
if
0
)
file oomscoreadj =
new
file(string.format(
"/proc/%d/oom_score_adj"
, pid));
if
(oomscoreadj.canread())
}
int
oomscore = integer.parseint(read(string.format(
"/proc/%d/oom_score"
, pid)));
if
(oomscore < lowestoomscore)
}
catch
(ioexception e)
}
return
foregroundprocess;
}
private
static
string read(string path)
throws
ioexception
reader.close();
return
output.tostring().trim();
//不呼叫trim(),包名後面會帶有亂碼
}
依照大神的**,在實際測試中有的手機能返回當然的包名,有的還是返回null,比照系統檔案和**分析,發現有的手機裡cgroup包含兩行cpu 和cpuacct,有的則是三行,多了一行memory。所以對**稍加改動,上面是改動過的。下面對呼叫的檔案和檔案內容解釋一下:
1.proc下以數字命名的資料夾,資料夾名即是乙個程序的pid,該資料夾下的檔案包含這個程序的資訊;
2.cgroup,控制組群(control groups)的簡寫,是linux核心的乙個功能,用來限制,控制與分離乙個程序組群的資源(如cpu、記憶體、磁碟輸入輸出等)。cpu:設定cpu的使用率;cpuacct:記錄cpu的統計資訊。
4.cmdline,顯示核心啟動的命令列。
5.oom_score_adj,這個檔案的數值用來標記在記憶體不足的情況下,啟發式的(不知道怎麼翻譯好==)選擇哪個程序被殺掉,值從0(從不被殺掉)到1000(總是被殺掉)。
Android5 1關機充電介面尺寸修改
因為專案的螢幕尺寸和一般的手機螢幕不一樣,因此關機充電介面在裝置上執行後嚴重變形,就需要自己修改這個介面了,廢話不多說了,開開啟打!首先要說明這裡是以android 5.1的原始碼實現的,其它版本原始碼可能會有差異。關機充電的介面和android上層應用一樣,是按照解析度的不同有很多組的,但是和上層...
Android 5 1高通方案增加GPIO按鍵
2016 10 18 16 02 218人閱讀收藏 舉報 linux裝置驅動 35 android的linux kernel本身有gpio keys驅動,結構和android 4.x差異較大,在我的msm8909上,測試表明增加gpio按鍵需要如下操作 gpio keys tlmm gpio key...
Android 5 1 如何監聽使用者按了home鍵
private broadcastreceiver mhomekeyeventreceiver new broadcastreceiver else if textutils.equals reason,system home key long 註冊廣播接收器 registerreceiver mh...