마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

앱 별 알림 설정 관련해서 질문드립니다.

–1 추천
 
 
그림 참고 시.
 
어플리케이션 정보에 알림 표시 체크 설정된 부분 가져올수있는 방법을 구합니다...
 
답변 부탁드립니다!.
HeyLee (850 포인트) 님이 2013년 9월 16일 질문

1개의 답변

0 추천

안드로이드 풀 소스의 코드 중 아래 URL의  initNotificationButton 부분을 참조하세요.

https://android.googlesource.com/platform/packages/apps/Settings/+/910b2116b0f1d3efdb95d663003a2181bf9faf33/src/com/android/settings/applications/InstalledAppDetails.java

코드 대로만 하면 되긴 할 텐데..  INotificationManage 클래스를  외부에서 바로 사용 못 하기 때문에 만약 쓰시려면 더미 인터페이스를 만드는 등의 우회 처리를 해 주셔야 할 듯 합니다.

 

사악미소 (65,330 포인트) 님이 2013년 9월 16일 답변
인터페이스 연결해서 메소드 호출까진 햇는데..다음 에러가 떨어지네요 ㅠㅠ;

더 진행이 안되네요.

    Class c1 = Class.forName(manager.getClass().getName());
                    Method m1= c1.getDeclaredMethod("getService");
                    m1.setAccessible(true);
                    INotificationManager service1= (INotificationManager) m1.invoke (manager);
                    Log.d("heylee","hi :  "+c1 + " / "+m1 + " / "+service1);
                    Log.d("heylee","hi 1111 :  "+service1.areNotificationsEnabledForPackage("com.example.teaa"));





09-16 18:06:56.792: W/System.err(2711): java.lang.SecurityException: Disallowed call for uid 10169
09-16 18:06:56.802: W/System.err(2711):     at android.os.Parcel.readException(Parcel.java:1425)
09-16 18:06:56.802: W/System.err(2711):     at android.os.Parcel.readException(Parcel.java:1379)
09-16 18:06:56.802: W/System.err(2711):     at android.app.INotificationManager$Stub$Proxy.areNotificationsEnabledForPackage(INotificationManager.java:352)
해당 메소드는 시스템앱만 호출가능한 것으로 보입니다.
NotificationManager Class 에서 시스템 앱을 체크하네요...

void checkCallerIsSystem() {
        int uid = Binder.getCallingUid();

        if (UserHandle.getAppId(uid) == Process.SYSTEM_UID || uid == 0) {
            return;
        }
        throw new SecurityException("Disallowed call for uid " + uid);
    }
...