Android如何獲取系統(tǒng)通知的開(kāi)啟狀態(tài)詳解
前言
大家應(yīng)該都有所體會(huì),平常在android應(yīng)用中,有時(shí)候會(huì)用到系統(tǒng)通知是否開(kāi)啟的狀態(tài),以便進(jìn)行下一步操作,所以,獲取到狀態(tài)是很有必要的,之前一直苦于找不到合適的方法來(lái)解決,因?yàn)楫吘股婕暗较到y(tǒng),不好辦,今日看到大神支招,試了一下,很好用,話(huà)不多少了,來(lái)一起看看詳細(xì)的介紹吧。
有圖有真相,首先到設(shè)置里邊關(guān)閉該應(yīng)用的通知開(kāi)關(guān):

然后在應(yīng)用中,點(diǎn)擊按鈕,獲取狀態(tài):

這時(shí)候,回到設(shè)置里,打開(kāi)通知按鈕:

再次點(diǎn)擊應(yīng)用中的測(cè)試按鈕,可以看到,通知已經(jīng)可用了:

代碼量很少,但是很精辟,就一個(gè)工具類(lèi),用到了java反射原理:
public class NotificationsUtils {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static boolean isNotificationEnabled(Context context) {
AppOpsManager mAppOps = (AppOpsManager)
context.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = context.getApplicationInfo();
String pkg = context.getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass = null; /* Context.APP_OPS_MANAGER */
try {
appOpsClass = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class);
Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
int value = (int)opPostNotificationValue.get(Integer.class);
return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
}
總結(jié)
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Android中ACTION_CANCEL的觸發(fā)機(jī)制與滑出子view的情況
這篇文章主要介紹了Android中ACTION_CANCEL的觸發(fā)機(jī)制與滑出子view的情況,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Android compose氣泡升起和水滴下墜動(dòng)畫(huà)實(shí)現(xiàn)示例
這篇文章主要為大家介紹了Android compose氣泡升起和水滴下墜動(dòng)畫(huà)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android使用Circular Reveal動(dòng)畫(huà)讓頁(yè)面跳轉(zhuǎn)更炫酷
本篇文章主要介紹了Android使用Circular Reveal動(dòng)畫(huà)讓頁(yè)面跳轉(zhuǎn)更炫酷,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Android開(kāi)發(fā)環(huán)境安裝和配置圖文教程
輕松搞定Android開(kāi)發(fā)環(huán)境部署,這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)環(huán)境安裝和配置圖文教程,感興趣的小伙伴們可以參考一下2016-06-06
Android在類(lèi)微信程序中實(shí)現(xiàn)藍(lán)牙聊天功能的示例代碼
這篇文章主要介紹了Android在類(lèi)微信程序中實(shí)現(xiàn)藍(lán)牙聊天功能,本文通過(guò)實(shí)例代碼給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Android 獲取屏幕高度,標(biāo)題高度,狀態(tài)欄高度(實(shí)例代碼)
getWindow().findViewById(Window.ID_ANDROID_CONTENT)這個(gè)方法獲取到的view就是程序不包括標(biāo)題欄的部分,然后就可以知道標(biāo)題欄的高度了2013-11-11
Android開(kāi)發(fā)之merge結(jié)合include優(yōu)化布局
這篇文章主要為大家詳細(xì)介紹了Android開(kāi)發(fā)之merge結(jié)合include優(yōu)化布局,感興趣的朋友可以參考一下2016-06-06

