Android 后臺(tái)運(yùn)行白名單實(shí)現(xiàn)?;?/h1>
更新時(shí)間:2019年12月20日 09:57:29 作者:NanBox
這篇文章主要介紹了Android 后臺(tái)運(yùn)行白名單實(shí)現(xiàn)?;睿闹型ㄟ^(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
保活現(xiàn)狀
我們知道,Android 系統(tǒng)會(huì)存在殺后臺(tái)進(jìn)程的情況,并且隨著系統(tǒng)版本的更新,殺進(jìn)程的力度還有越來(lái)越大的趨勢(shì)。系統(tǒng)這種做法本身出發(fā)點(diǎn)是好的,因?yàn)榭梢怨?jié)省內(nèi)存,降低功耗,也避免了一些流氓行為。
但有一部分應(yīng)用,應(yīng)用本身的使用場(chǎng)景就需要在后臺(tái)運(yùn)行,用戶也是愿意讓它在后臺(tái)運(yùn)行的,比如跑步類應(yīng)用。一方面流氓軟件用各種流氓手段進(jìn)行?;?,另一方面系統(tǒng)加大殺后臺(tái)的力度,導(dǎo)致我們一些真正需要在后臺(tái)運(yùn)行的應(yīng)用被誤殺,苦不堪言。
優(yōu)雅?;睿?/strong>
為了做到?;?,出現(xiàn)了不少「黑科技」,比如 1 個(gè)像素的 Activity,播放無(wú)聲音頻,雙進(jìn)程互相守護(hù)等。這些做法可以說(shuō)是很流氓了,甚至破壞了 Android 的生態(tài),好在隨著 Android 系統(tǒng)版本的更新,這些非常規(guī)的?;钍侄魏芏喽家咽Я?。
對(duì)于那些確實(shí)需要在后臺(tái)運(yùn)行的應(yīng)用,我們?nèi)绾巫龅絻?yōu)雅的?;钅??
后臺(tái)運(yùn)行白名單
從 Android 6.0 開(kāi)始,系統(tǒng)為了省電增加了休眠模式,系統(tǒng)待機(jī)一段時(shí)間后,會(huì)殺死后臺(tái)正在運(yùn)行的進(jìn)程。但系統(tǒng)會(huì)有一個(gè)后臺(tái)運(yùn)行白名單,白名單里的應(yīng)用將不會(huì)受到影響,在原生系統(tǒng)下,通過(guò)「設(shè)置」 - 「電池」 - 「電池優(yōu)化」 - 「未優(yōu)化應(yīng)用」,可以看到這個(gè)白名單,通常會(huì)看到下面這兩位:

下次被產(chǎn)品說(shuō)「 XXX 都可以?;睿瑸槭裁次覀儾恍?!」的時(shí)候,你就知道怎么懟回去了。大廠通過(guò)和手機(jī)廠商的合作,將自己的應(yīng)用默認(rèn)加入到白名單中。如果你在一個(gè)能談成這種合作的大廠,也就不用往下看了。
好在系統(tǒng)還沒(méi)有拋棄我們,允許我們申請(qǐng)把應(yīng)用加入白名單。
首先,可以通過(guò)以下方法,判斷我們的應(yīng)用是否在白名單中:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
如果不在白名單中,可以通過(guò)以下代碼申請(qǐng)加入白名單:
@RequiresApi(api = Build.VERSION_CODES.M)
private boolean isIgnoringBatteryOptimizations() {
boolean isIgnoring = false;
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (powerManager != null) {
isIgnoring = powerManager.isIgnoringBatteryOptimizations(getPackageName());
}
return isIgnoring;
}
申請(qǐng)時(shí),應(yīng)用上會(huì)出現(xiàn)這樣一個(gè)窗口:

可以看到,這個(gè)系統(tǒng)彈窗會(huì)有影響電池續(xù)航的提醒,所以如果想讓用戶點(diǎn)允許,必須要有相關(guān)的說(shuō)明。如果要判斷用戶是否點(diǎn)擊了允許,可以在申請(qǐng)的時(shí)候調(diào)用 startActivityForResult,在 onActivityResult 里再判斷一次是否在白名單中。
廠商后臺(tái)管理
Android 開(kāi)發(fā)的一個(gè)難點(diǎn)在于,各大手機(jī)廠商對(duì)原生系統(tǒng)進(jìn)行了不同的定制,導(dǎo)致我們需要進(jìn)行不同的適配,后臺(tái)管理就是一個(gè)很好的體現(xiàn)。幾乎各個(gè)廠商都有自己的后臺(tái)管理,就算應(yīng)用加入了后臺(tái)運(yùn)行白名單,仍然可能會(huì)被廠商自己的后臺(tái)管理干掉。
如果能把應(yīng)用加入廠商系統(tǒng)的后臺(tái)管理白名單,可以進(jìn)一步降低進(jìn)程被殺的概率。不同的廠商在不同的地方進(jìn)行設(shè)置,一般是在各自的「手機(jī)管家」,但更難的是,就算同一個(gè)廠商的系統(tǒng),不同的版本也可能是在不同地方設(shè)置。
最理想的做法是,我們根據(jù)不同手機(jī),甚至是不同的系統(tǒng)版本,給用戶呈現(xiàn)一個(gè)圖文操作步驟,并且提供一個(gè)按鈕,直接跳轉(zhuǎn)到指定頁(yè)面進(jìn)行設(shè)置。但需要對(duì)每個(gè)廠商每個(gè)版本進(jìn)行適配,工作量是比較大的。我使用真機(jī)測(cè)試了大部分主流 Android 廠商的手機(jī)后,整理出了部分手機(jī)的相關(guān)資料。
首先我們可以定義這樣兩個(gè)方法:
/**
* 跳轉(zhuǎn)到指定應(yīng)用的首頁(yè)
*/
private void showActivity(@NonNull String packageName) {
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
}
/**
* 跳轉(zhuǎn)到指定應(yīng)用的指定頁(yè)面
*/
private void showActivity(@NonNull String packageName, @NonNull String activityDir) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, activityDir));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
以下是部分手機(jī)的廠商判斷,跳轉(zhuǎn)方法及對(duì)應(yīng)設(shè)置步驟,跳轉(zhuǎn)方法不保證在所有版本上都能成功跳轉(zhuǎn),都需要加 try catch。
華為
廠商判斷
public boolean isHuawei() {
if (Build.BRAND == null) {
return false;
} else {
return Build.BRAND.toLowerCase().equals("huawei") || Build.BRAND.toLowerCase().equals("honor");
}
}
跳轉(zhuǎn)華為手機(jī)管家的啟動(dòng)管理頁(yè):
private void goHuaweiSetting() {
try {
showActivity("com.huawei.systemmanager",
"com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");
} catch (Exception e) {
showActivity("com.huawei.systemmanager",
"com.huawei.systemmanager.optimize.bootstart.BootStartActivity");
}
}
操作步驟:應(yīng)用啟動(dòng)管理 -> 關(guān)閉應(yīng)用開(kāi)關(guān) -> 打開(kāi)允許自啟動(dòng)
小米
廠商判斷
public static boolean isXiaomi() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("xiaomi");
}
跳轉(zhuǎn)小米安全中心的自啟動(dòng)管理頁(yè)面:
private void goXiaomiSetting() {
showActivity("com.miui.securitycenter",
"com.miui.permcenter.autostart.AutoStartManagementActivity");
}
操作步驟:授權(quán)管理 -> 自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
OPPO
廠商判斷
public static boolean isOPPO() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("oppo");
}
跳轉(zhuǎn) OPPO 手機(jī)管家:
private void goOPPOSetting() {
try {
showActivity("com.coloros.phonemanager");
} catch (Exception e1) {
try {
showActivity("com.oppo.safe");
} catch (Exception e2) {
try {
showActivity("com.coloros.oppoguardelf");
} catch (Exception e3) {
showActivity("com.coloros.safecenter");
}
}
}
}
操作步驟:權(quán)限隱私 -> 自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
VIVO
廠商判斷
public static boolean isVIVO() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("vivo");
}
跳轉(zhuǎn) VIVO 手機(jī)管家:
private void goVIVOSetting() {
showActivity("com.iqoo.secure");
}
操作步驟:權(quán)限管理 -> 自啟動(dòng) -> 允許應(yīng)用自啟動(dòng)
魅族
廠商判斷
public static boolean isMeizu() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("meizu");
}
跳轉(zhuǎn)魅族手機(jī)管家:
private void goMeizuSetting() {
showActivity("com.meizu.safe");
}
操作步驟:權(quán)限管理 -> 后臺(tái)管理 -> 點(diǎn)擊應(yīng)用 -> 允許后臺(tái)運(yùn)行
三星
廠商判斷
public static boolean isSamsung() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("samsung");
}
跳轉(zhuǎn)三星智能管理器:
private void goSamsungSetting() {
try {
showActivity("com.samsung.android.sm_cn");
} catch (Exception e) {
showActivity("com.samsung.android.sm");
}
}
操作步驟:自動(dòng)運(yùn)行應(yīng)用程序 -> 打開(kāi)應(yīng)用開(kāi)關(guān) -> 電池管理 -> 未監(jiān)視的應(yīng)用程序 -> 添加應(yīng)用
樂(lè)視
廠商判斷
public static boolean isLeTV() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("letv");
}
跳轉(zhuǎn)樂(lè)視手機(jī)管家:
private void goLetvSetting() {
showActivity("com.letv.android.letvsafe",
"com.letv.android.letvsafe.AutobootManageActivity");
}
操作步驟:自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
錘子
廠商判斷
public static boolean isSmartisan() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("smartisan");
}
跳轉(zhuǎn)手機(jī)管理:
private void goSmartisanSetting() {
showActivity("com.smartisanos.security");
}
操作步驟:權(quán)限管理 -> 自啟動(dòng)權(quán)限管理 -> 點(diǎn)擊應(yīng)用 -> 允許被系統(tǒng)啟動(dòng)
友商致敬?
在之前做的跑步應(yīng)用中,我在設(shè)置里增加了一個(gè)權(quán)限設(shè)置頁(yè)面,將上面提到的以及一些運(yùn)行所必須的權(quán)限設(shè)置放在這里面。最近發(fā)現(xiàn)友商某咚也跟進(jìn)了,圖 1 是我們做的,圖 2 是某咚做的:

某咚從設(shè)計(jì)、從我寫的不夠好的文案,甚至是我從十幾臺(tái)手機(jī)上一張一張截下來(lái)的圖,進(jìn)行了全方位的致敬。感謝友商的認(rèn)可,但最近在某個(gè)發(fā)布會(huì)上聽(tīng)到這么一句話:在致敬的同時(shí),能不能說(shuō)一句謝謝?
某咚的這種致敬,一方面說(shuō)明了目前確實(shí)存在進(jìn)程容易被殺,?;铍y度大的問(wèn)題,另一方面也說(shuō)明了這種引導(dǎo)用戶進(jìn)行白名單設(shè)置的手段是有效的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
-
android截圖事件監(jiān)聽(tīng)的原理與實(shí)現(xiàn)
本篇文章主要介紹了android截圖事件監(jiān)聽(tīng)的原理與實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
2017-07-07
-
Android中Glide加載庫(kù)的圖片緩存配置究極指南
這篇文章主要介紹了Android中Glide加載庫(kù)的圖片緩存配置究極指南,Glide是一款高人氣的安卓多媒體資源加載庫(kù),本文對(duì)其緩存設(shè)置和優(yōu)化作了詳細(xì)講解,需要的朋友可以參考下 2016-04-04
-
Android wifi 調(diào)試詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android wifi 調(diào)試詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下 2017-02-02
-
Android ApplicationContext接口深入分析
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽(tīng)事件,加載資源文件等 2022-11-11
-
android 通過(guò)向viewpage中添加listview來(lái)完成滑動(dòng)效果(類似于qq滑動(dòng)界面)
android 通過(guò)向viewpage中添加listview來(lái)完成滑動(dòng)效果(類似于qq滑動(dòng)界面),需要的朋友可以參考一下 2013-05-05
-
Android自定義實(shí)現(xiàn)圖片加文字功能
這篇文章主要介紹了Android自定義實(shí)現(xiàn)圖片加文字功能的相關(guān)資料,需要的朋友可以參考下 2017-05-05
-
Android基于ViewPager Fragment實(shí)現(xiàn)選項(xiàng)卡
這篇文章主要介紹了Android基于ViewPager Fragment實(shí)現(xiàn)選項(xiàng)卡的相關(guān)資料,需要的朋友可以參考下 2015-11-11
-
詳解Android TabHost的多種實(shí)現(xiàn)方法 附源碼下載
這篇文章主要為大家詳細(xì)介紹了Android TabHost的多種實(shí)現(xiàn)方法 文章中針對(duì)每一種實(shí)現(xiàn)方法都附有源碼進(jìn)行下載,感興趣的小伙伴們可以參考一下 2016-05-05
-
Android如何調(diào)整線程調(diào)用棧大小
這篇文章主要介紹了Android如何調(diào)整線程調(diào)用棧大小,幫助大家更好的進(jìn)行Android開(kāi)發(fā),完善自身程序,感興趣的朋友可以了解下 2020-10-10
最新評(píng)論
保活現(xiàn)狀
我們知道,Android 系統(tǒng)會(huì)存在殺后臺(tái)進(jìn)程的情況,并且隨著系統(tǒng)版本的更新,殺進(jìn)程的力度還有越來(lái)越大的趨勢(shì)。系統(tǒng)這種做法本身出發(fā)點(diǎn)是好的,因?yàn)榭梢怨?jié)省內(nèi)存,降低功耗,也避免了一些流氓行為。
但有一部分應(yīng)用,應(yīng)用本身的使用場(chǎng)景就需要在后臺(tái)運(yùn)行,用戶也是愿意讓它在后臺(tái)運(yùn)行的,比如跑步類應(yīng)用。一方面流氓軟件用各種流氓手段進(jìn)行?;?,另一方面系統(tǒng)加大殺后臺(tái)的力度,導(dǎo)致我們一些真正需要在后臺(tái)運(yùn)行的應(yīng)用被誤殺,苦不堪言。
優(yōu)雅?;睿?/strong>
為了做到?;?,出現(xiàn)了不少「黑科技」,比如 1 個(gè)像素的 Activity,播放無(wú)聲音頻,雙進(jìn)程互相守護(hù)等。這些做法可以說(shuō)是很流氓了,甚至破壞了 Android 的生態(tài),好在隨著 Android 系統(tǒng)版本的更新,這些非常規(guī)的?;钍侄魏芏喽家咽Я?。
對(duì)于那些確實(shí)需要在后臺(tái)運(yùn)行的應(yīng)用,我們?nèi)绾巫龅絻?yōu)雅的?;钅??
后臺(tái)運(yùn)行白名單
從 Android 6.0 開(kāi)始,系統(tǒng)為了省電增加了休眠模式,系統(tǒng)待機(jī)一段時(shí)間后,會(huì)殺死后臺(tái)正在運(yùn)行的進(jìn)程。但系統(tǒng)會(huì)有一個(gè)后臺(tái)運(yùn)行白名單,白名單里的應(yīng)用將不會(huì)受到影響,在原生系統(tǒng)下,通過(guò)「設(shè)置」 - 「電池」 - 「電池優(yōu)化」 - 「未優(yōu)化應(yīng)用」,可以看到這個(gè)白名單,通常會(huì)看到下面這兩位:

下次被產(chǎn)品說(shuō)「 XXX 都可以?;睿瑸槭裁次覀儾恍?!」的時(shí)候,你就知道怎么懟回去了。大廠通過(guò)和手機(jī)廠商的合作,將自己的應(yīng)用默認(rèn)加入到白名單中。如果你在一個(gè)能談成這種合作的大廠,也就不用往下看了。
好在系統(tǒng)還沒(méi)有拋棄我們,允許我們申請(qǐng)把應(yīng)用加入白名單。
首先,可以通過(guò)以下方法,判斷我們的應(yīng)用是否在白名單中:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
如果不在白名單中,可以通過(guò)以下代碼申請(qǐng)加入白名單:
@RequiresApi(api = Build.VERSION_CODES.M)
private boolean isIgnoringBatteryOptimizations() {
boolean isIgnoring = false;
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
if (powerManager != null) {
isIgnoring = powerManager.isIgnoringBatteryOptimizations(getPackageName());
}
return isIgnoring;
}
申請(qǐng)時(shí),應(yīng)用上會(huì)出現(xiàn)這樣一個(gè)窗口:

可以看到,這個(gè)系統(tǒng)彈窗會(huì)有影響電池續(xù)航的提醒,所以如果想讓用戶點(diǎn)允許,必須要有相關(guān)的說(shuō)明。如果要判斷用戶是否點(diǎn)擊了允許,可以在申請(qǐng)的時(shí)候調(diào)用 startActivityForResult,在 onActivityResult 里再判斷一次是否在白名單中。
廠商后臺(tái)管理
Android 開(kāi)發(fā)的一個(gè)難點(diǎn)在于,各大手機(jī)廠商對(duì)原生系統(tǒng)進(jìn)行了不同的定制,導(dǎo)致我們需要進(jìn)行不同的適配,后臺(tái)管理就是一個(gè)很好的體現(xiàn)。幾乎各個(gè)廠商都有自己的后臺(tái)管理,就算應(yīng)用加入了后臺(tái)運(yùn)行白名單,仍然可能會(huì)被廠商自己的后臺(tái)管理干掉。
如果能把應(yīng)用加入廠商系統(tǒng)的后臺(tái)管理白名單,可以進(jìn)一步降低進(jìn)程被殺的概率。不同的廠商在不同的地方進(jìn)行設(shè)置,一般是在各自的「手機(jī)管家」,但更難的是,就算同一個(gè)廠商的系統(tǒng),不同的版本也可能是在不同地方設(shè)置。
最理想的做法是,我們根據(jù)不同手機(jī),甚至是不同的系統(tǒng)版本,給用戶呈現(xiàn)一個(gè)圖文操作步驟,并且提供一個(gè)按鈕,直接跳轉(zhuǎn)到指定頁(yè)面進(jìn)行設(shè)置。但需要對(duì)每個(gè)廠商每個(gè)版本進(jìn)行適配,工作量是比較大的。我使用真機(jī)測(cè)試了大部分主流 Android 廠商的手機(jī)后,整理出了部分手機(jī)的相關(guān)資料。
首先我們可以定義這樣兩個(gè)方法:
/**
* 跳轉(zhuǎn)到指定應(yīng)用的首頁(yè)
*/
private void showActivity(@NonNull String packageName) {
Intent intent = getPackageManager().getLaunchIntentForPackage(packageName);
startActivity(intent);
}
/**
* 跳轉(zhuǎn)到指定應(yīng)用的指定頁(yè)面
*/
private void showActivity(@NonNull String packageName, @NonNull String activityDir) {
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, activityDir));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
以下是部分手機(jī)的廠商判斷,跳轉(zhuǎn)方法及對(duì)應(yīng)設(shè)置步驟,跳轉(zhuǎn)方法不保證在所有版本上都能成功跳轉(zhuǎn),都需要加 try catch。
華為
廠商判斷
public boolean isHuawei() {
if (Build.BRAND == null) {
return false;
} else {
return Build.BRAND.toLowerCase().equals("huawei") || Build.BRAND.toLowerCase().equals("honor");
}
}
跳轉(zhuǎn)華為手機(jī)管家的啟動(dòng)管理頁(yè):
private void goHuaweiSetting() {
try {
showActivity("com.huawei.systemmanager",
"com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");
} catch (Exception e) {
showActivity("com.huawei.systemmanager",
"com.huawei.systemmanager.optimize.bootstart.BootStartActivity");
}
}
操作步驟:應(yīng)用啟動(dòng)管理 -> 關(guān)閉應(yīng)用開(kāi)關(guān) -> 打開(kāi)允許自啟動(dòng)
小米
廠商判斷
public static boolean isXiaomi() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("xiaomi");
}
跳轉(zhuǎn)小米安全中心的自啟動(dòng)管理頁(yè)面:
private void goXiaomiSetting() {
showActivity("com.miui.securitycenter",
"com.miui.permcenter.autostart.AutoStartManagementActivity");
}
操作步驟:授權(quán)管理 -> 自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
OPPO
廠商判斷
public static boolean isOPPO() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("oppo");
}
跳轉(zhuǎn) OPPO 手機(jī)管家:
private void goOPPOSetting() {
try {
showActivity("com.coloros.phonemanager");
} catch (Exception e1) {
try {
showActivity("com.oppo.safe");
} catch (Exception e2) {
try {
showActivity("com.coloros.oppoguardelf");
} catch (Exception e3) {
showActivity("com.coloros.safecenter");
}
}
}
}
操作步驟:權(quán)限隱私 -> 自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
VIVO
廠商判斷
public static boolean isVIVO() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("vivo");
}
跳轉(zhuǎn) VIVO 手機(jī)管家:
private void goVIVOSetting() {
showActivity("com.iqoo.secure");
}
操作步驟:權(quán)限管理 -> 自啟動(dòng) -> 允許應(yīng)用自啟動(dòng)
魅族
廠商判斷
public static boolean isMeizu() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("meizu");
}
跳轉(zhuǎn)魅族手機(jī)管家:
private void goMeizuSetting() {
showActivity("com.meizu.safe");
}
操作步驟:權(quán)限管理 -> 后臺(tái)管理 -> 點(diǎn)擊應(yīng)用 -> 允許后臺(tái)運(yùn)行
三星
廠商判斷
public static boolean isSamsung() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("samsung");
}
跳轉(zhuǎn)三星智能管理器:
private void goSamsungSetting() {
try {
showActivity("com.samsung.android.sm_cn");
} catch (Exception e) {
showActivity("com.samsung.android.sm");
}
}
操作步驟:自動(dòng)運(yùn)行應(yīng)用程序 -> 打開(kāi)應(yīng)用開(kāi)關(guān) -> 電池管理 -> 未監(jiān)視的應(yīng)用程序 -> 添加應(yīng)用
樂(lè)視
廠商判斷
public static boolean isLeTV() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("letv");
}
跳轉(zhuǎn)樂(lè)視手機(jī)管家:
private void goLetvSetting() {
showActivity("com.letv.android.letvsafe",
"com.letv.android.letvsafe.AutobootManageActivity");
}
操作步驟:自啟動(dòng)管理 -> 允許應(yīng)用自啟動(dòng)
錘子
廠商判斷
public static boolean isSmartisan() {
return Build.BRAND != null && Build.BRAND.toLowerCase().equals("smartisan");
}
跳轉(zhuǎn)手機(jī)管理:
private void goSmartisanSetting() {
showActivity("com.smartisanos.security");
}
操作步驟:權(quán)限管理 -> 自啟動(dòng)權(quán)限管理 -> 點(diǎn)擊應(yīng)用 -> 允許被系統(tǒng)啟動(dòng)
友商致敬?
在之前做的跑步應(yīng)用中,我在設(shè)置里增加了一個(gè)權(quán)限設(shè)置頁(yè)面,將上面提到的以及一些運(yùn)行所必須的權(quán)限設(shè)置放在這里面。最近發(fā)現(xiàn)友商某咚也跟進(jìn)了,圖 1 是我們做的,圖 2 是某咚做的:

某咚從設(shè)計(jì)、從我寫的不夠好的文案,甚至是我從十幾臺(tái)手機(jī)上一張一張截下來(lái)的圖,進(jìn)行了全方位的致敬。感謝友商的認(rèn)可,但最近在某個(gè)發(fā)布會(huì)上聽(tīng)到這么一句話:在致敬的同時(shí),能不能說(shuō)一句謝謝?
某咚的這種致敬,一方面說(shuō)明了目前確實(shí)存在進(jìn)程容易被殺,?;铍y度大的問(wèn)題,另一方面也說(shuō)明了這種引導(dǎo)用戶進(jìn)行白名單設(shè)置的手段是有效的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
android截圖事件監(jiān)聽(tīng)的原理與實(shí)現(xiàn)
本篇文章主要介紹了android截圖事件監(jiān)聽(tīng)的原理與實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
Android中Glide加載庫(kù)的圖片緩存配置究極指南
這篇文章主要介紹了Android中Glide加載庫(kù)的圖片緩存配置究極指南,Glide是一款高人氣的安卓多媒體資源加載庫(kù),本文對(duì)其緩存設(shè)置和優(yōu)化作了詳細(xì)講解,需要的朋友可以參考下2016-04-04
Android wifi 調(diào)試詳解及簡(jiǎn)單實(shí)例
這篇文章主要介紹了Android wifi 調(diào)試詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android ApplicationContext接口深入分析
ApplicationContext是Spring應(yīng)用程序中的中央接口,由于繼承了多個(gè)組件,使得ApplicationContext擁有了許多Spring的核心功能,如獲取bean組件,注冊(cè)監(jiān)聽(tīng)事件,加載資源文件等2022-11-11
android 通過(guò)向viewpage中添加listview來(lái)完成滑動(dòng)效果(類似于qq滑動(dòng)界面)
android 通過(guò)向viewpage中添加listview來(lái)完成滑動(dòng)效果(類似于qq滑動(dòng)界面),需要的朋友可以參考一下2013-05-05
Android自定義實(shí)現(xiàn)圖片加文字功能
這篇文章主要介紹了Android自定義實(shí)現(xiàn)圖片加文字功能的相關(guān)資料,需要的朋友可以參考下2017-05-05
Android基于ViewPager Fragment實(shí)現(xiàn)選項(xiàng)卡
這篇文章主要介紹了Android基于ViewPager Fragment實(shí)現(xiàn)選項(xiàng)卡的相關(guān)資料,需要的朋友可以參考下2015-11-11
詳解Android TabHost的多種實(shí)現(xiàn)方法 附源碼下載
這篇文章主要為大家詳細(xì)介紹了Android TabHost的多種實(shí)現(xiàn)方法 文章中針對(duì)每一種實(shí)現(xiàn)方法都附有源碼進(jìn)行下載,感興趣的小伙伴們可以參考一下2016-05-05
Android如何調(diào)整線程調(diào)用棧大小
這篇文章主要介紹了Android如何調(diào)整線程調(diào)用棧大小,幫助大家更好的進(jìn)行Android開(kāi)發(fā),完善自身程序,感興趣的朋友可以了解下2020-10-10

