Android도 iOS처럼 앱마다 알림수신을 ON/OFF 할 수 있습니다.
위 사진에서 '알림표시'가 그것인데요.
프로그래머 입장에서는 이 '알림표시'가 체크되어 있는지 아닌지 알아야 할 때가 있습니다.
이전에는 Reflection을 이용한 방법은 있습니다만 공식적으로는 불가능 했습니다.
하지만 Google I/O 2016에서 support-v4 ver24.0부터 공식적으로 지원한다고 합니다.
Reflection 을 이용한 방법은 다음과 같습니다.
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; }
}
출처 : How to check notifications are disabled for the application?
이번에 추가된 함수는 다음과 같습니다.
NotificationManagerCompat.areNotificationsEnabled()
다만, API 19 이상부터 사용할 수 있으니 그 이하 버전을 지원하는 앱일 경우에는 Reflection 방법을 사용하셔야 할 것 같습니다.
반응형
'프로그래밍 > Android' 카테고리의 다른 글
Butter Knife (Field and method binding for android views) (0) | 2016.08.25 |
---|---|
Android HTTP dump log 보기 (apache http) (0) | 2016.08.25 |
Android JUnit - app의 resource에 접근하기 (0) | 2016.08.11 |
gson 소개 및 사용법 (0) | 2016.08.03 |
터미널에서 logcat을 이쁘게 보자. (Colored logcat script : pidcat 소개) (1) | 2016.07.29 |