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

안녕하세요 연락처 갖고오기 앱만드는데 디버그 질문있습니다!

0 추천

안녕하세요 로그캣은 일단

at com.example.keeyoung.ddingtalk.MainActivity.getContactList(MainActivity.java:62)

at com.example.keeyoung.ddingtalk.MainActivity.onResume(MainActivity.java:42)

이렇게 뜨는데요 흠.. 저 부분에 해당하는 소스를 보여드리자면

ContactsAdapter adapter = new ContactsAdapter(ContactListActivity.this,
				R.layout.layout_phonelist, getContactList());
이부분과
Cursor contactCursor = managedQuery(uri, projection, null,
      selectionArgs, sortOrder);
이부분입니다..
빨간줄이 그어지지는않는데 핸드폰으로 앱을 키면 중지되었다고 계속 뜨네요..ㅠ

 

키영송 님이 2017년 1월 31일 질문

1개의 답변

0 추천
대략적인 짐작으로는 READ_CONTACT 권한 관련해서 문제가 발생하는것 같지만 정확한 답변을 원하시면 stacktrace보다도 에러 메시지를 뱉어주세요.
Development Guy (70,570 포인트) 님이 2017년 1월 31일 답변
매니패스트에서
<uses-permission android:name="android.permission.READ_CONTACTS" />
이렇게 선언했는데도 managedQuery이부분에서 계속 오류인거 같은데..
stacktrace말고 에러메시지는 어떻게 자세히 보나요?
걍 빨간거 전문 올려보셔요. ㅋ
그리고 개발중인 디바이스 버전이 6.0 이상이고 targetSDK가 23 이상이면 manifest말고 실제 런타임에서 권한 확인해서 유저한테 요청하셔야 합니다. 위의 환경이면 디폴트가 해제 되어 있어요
너무 길다는데요..ㅠ
부분적으로 올려볼께요

01-31 18:49:40.518 20663-20663/? E/Zygote: v2
01-31 18:49:40.518 20663-20663/? I/libpersona: KNOX_SDCARD checking this for 10353
01-31 18:49:40.518 20663-20663/? I/libpersona: KNOX_SDCARD not a persona
01-31 18:49:40.518 20663-20663/? W/SELinux: Function: selinux_compare_spd_ram, index[1], priority [2], priority version is VE=SEPF_SECMOBILE_6.0.1_0026
01-31 18:49:40.518 20663-20663/? E/Zygote: accessInfo : 0
01-31 18:49:40.518 20663-20663/? W/SELinux: SELinux: seapp_context_lookup: seinfo=default, level=s0:c512,c768, pkgname=com.example.keeyoung.ddingtalk
01-31 18:49:40.518 20663-20663/? I/art: Late-enabling -Xcheck:jni
01-31 18:49:40.538 20663-20663/? D/TimaKeyStoreProvider: TimaSignature is unavailable
01-31 18:49:40.538 20663-20663/? D/ActivityThread: Added TimaKeyStore provider
01-31 18:49:40.608 20663-20663/com.example.keeyoung.ddingtalk W/ResourcesManager: getTopLevelResources: /data/app/com.example.keeyoung.ddingtalk-2/base.apk / 1.0 running in com.example.keeyoung.ddingtalk rsrc of package com.example.keeyoung.ddingtalk
01-31 18:49:40.608 20663-20663/com.example.keeyoung.ddingtalk I/InjectionManager: Inside getClassLibPath + mLibMap{0=, 1=}
01-31 18:49:40.618 20663-20663/com.example.keeyoung.ddingtalk D/ResourcesManager: For user 0 new overlays fetched Null
01-31 18:49:40.638 20663-20663/com.example.keeyoung.ddingtalk I/InjectionManager: Inside getClassLibPath caller
01-31 18:49:40.638 20663-20663/com.example.keeyoung.ddingtalk W/System: ClassLoader referenced unknown path: /data/app/com.example.keeyoung.ddingtalk-2/lib/arm64
01-31 18:49:40.638 20663-20663/com.example.keeyoung.ddingtalk I/InstantRun: Instant Run Runtime started. Android package is com.example.keeyoung.ddingtalk, real application class is null.
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk W/System: ClassLoader referenced unknown path: /data/app/com.example.keeyoung.ddingtalk-2/lib/arm64
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.088 20663-20663/com.example.keeyoung.ddingtalk D/Minikin: FontFamily bestFont == NULL, so return vacant FakedFont
01-31 18:49:41.098 20663-20663/com.example.keeyoung.ddingtalk D/InjectionManager: InjectionManager
01-31 18:49:41.098 20663-20663/com.example.keeyoung.ddingtalk D/InjectionManager: fillFeatureStoreMap com.example.keeyoung.ddingtalk
01-31 18:49:41.098 20663-20663/com.example.keeyoung.ddingtalk I/InjectionManager: Constructor com.example.keeyoung.ddingtalk, Feature store :{}
01-31 18:49:41.098 20663-20663/com.example.keeyoung.ddingtalk I/InjectionManager: featureStore :{}
01-31 18:49:41.148 20663-20663/com.example.keeyoung.ddingtalk W/ResourcesManager: getTopLevelResources: /data/app/com.example.keeyoung.ddingtalk-2/base.apk / 1.0 running in com.example.keeyoung.ddingtalk rsrc of package com.example.keeyoung.ddingtalk
01-31 18:49:41.158 20663-20663/com.example.keeyoung.ddingtalk W/ResourcesManager: getTopLevelResources: /data/app/com.example.keeyoung.ddingtalk-2/base.apk / 1.0 running in com.example.keeyoung.ddingtalk rsrc of package com.example.keeyoung.ddingtalk
01-31 18:49:41.198 20663-20663/com.example.keeyoung.ddingtalk W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
01-31 18:49:41.298 20663-20663/com.example.keeyoung.ddingtalk D/AbsListView: Get MotionRecognitionManager
01-31 18:49:41.298 20663-20663/com.example.keeyoung.ddingtalk E/MotionRecognitionManager: mSContextService = android.hardware.scontext.ISContextService$Stub$Proxy@677c7a4
01-31 18:49:41.298 20663-20663/com.example.keeyoung.ddingtalk E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@cac290d
01-31 18:49:41.298 20663-20663/com.example.keeyoung.ddingtalk E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@cac290d
01-31 18:49:41.298 20663-20663/com.example.keeyoung.ddingtalk D/Activity: performCreate Call Injection manager
01-31 18:49:41.328 20663-20663/com.example.keeyoung.ddingtalk I/InjectionManager: dispatchOnViewCreated > Target : com.example.keeyoung.ddingtalk.MainActivity isFragment :false
01-31 18:49:41.328 20663-20663/com.example.keeyoung.ddingtalk D/AndroidRuntime: Shutting down VM
01-31 18:49:41.328 20663-20663/com.example.keeyoung.ddingtalk E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.keeyoung.ddingtalk, PID: 20663
                                                                                java.lang.RuntimeException: Unable to resume activity {com.example.keeyoung.ddingtalk/com.example.keeyoung.ddingtalk.MainActivity}: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{acb680 20663:com.example.keeyoung.ddingtalk/u0a353} (pid=20663, uid=10353) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
                                                                                    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4156)
                                                                                    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3361)
                                                                                    at android.app.ActivityThread.access$1100(ActivityThread.java:222)
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:158)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
                                                                                 Caused by: java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{acb680 20663:com.example.keeyoung.ddingtalk/u0a353} (pid=20663, uid=10353) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS
                                                                                    at android.os.Parcel.readException(Parcel.java:1620)
                                                                                    at android.os.Parcel.readException(Parcel.java:1573)
                                                                                    at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:4241)
                                                                                    at android.app.ActivityThread.acquireProvider(ActivityThread.java:6392)
                                                                                    at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2321)
                                                                                    at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1521)
                                                                                    at android.content.ContentResolver.query(ContentResolver.java:486)
                                                                                    at android.content.ContentResolver.query(ContentResolver.java:445)
                                                                                    at com.example.keeyoung.ddingtalk.MainActivity.getContactList(MainActivity.java:60)
                                                                                    at com.example.keeyoung.ddingtalk.MainActivity.onResume(MainActivity.java:40)
                                                                                    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1286)
                                                                                    at android.app.Activity.performResume(Activity.java:6987)
                                                                                    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4145)
                                                                                    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4250)
                                                                                    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3361)
                                                                                    at android.app.ActivityThread.access$1100(ActivityThread.java:222)
                                                                                    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795)
                                                                                    at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                    at android.os.Looper.loop(Looper.java:158)
                                                                                    at android.app.ActivityThread.main(ActivityThread.java:7229)
                                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
01-31 18:49:41.348 20663-20663/com.example.keeyoung.ddingtalk I/Process: Sending signal. PID: 20663 SIG: 9
제일 중요한 핵심이 여기 있네요.

requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS

READ_CONTACTS 또는 WRITE_CONTACTS 권한이 필요하대요
메니페스트에 추가햇는데  왜그러나요?
위에서 설명 드렸습니다.
"개발중인 디바이스 버전이 6.0 이상이고 targetSDK가 23 이상이면 manifest말고 실제 런타임에서 권한 확인해서 유저한테 요청하셔야 합니다."
라고

런타임퍼미션 관련 레퍼런스 : https://developer.android.com/training/permissions/requesting.html?hl=ko
아네^^ 감사합니다! 새복많이받으세요
...