[Android 6.0 마시멜로] 권한 오류에 대한 트러블슈팅
잘 되던 개발중인 앱이 어느날 갑자기 안드로이드 업데이트 이후 안되기 시작했다. 이유가 뭘까..? 곰곰히 살펴본 결과
manifest 설정에도 문제가 없었고 결과적으로 안드로이드 6.0 이후에 앱마다 권한설정을 체크할 수 있는 부분이 생겼다는 것을 알 수 있었다
잘되던 위치체크가 안된다던가 전화번호를 갑자기 못얻어 온다던가 하는 경우에는 이 경우일 확률이 높다.
아마 마켓에서 바로 다운받았다면 이러한 문제가 생기진 않을것같다. 그랬다가는 일반사용자들의 불만이 엄청나질테니까..
때문에 개발중에는 신경을 써야할듯하다.
에러메시지는 다음과 같이 나왔었다. 꼭 manifest 설정을 안해준게 아닐까 생각이 들었지만 정확하게 설정이 되어있다.
java.lang.RuntimeException: Unable to create service com.recorder.RecorderService: java.lang.SecurityException: getLine1NumberForDisplay: Neither user 10281 nor current process has android.permission.READ_SMS.
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3817)
at android.app.ActivityThread.access$2100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
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: getLine1NumberForDisplay: Neither user 10281 nor current process has android.permission.READ_SMS.
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at com.android.internal.telephony.ITelephony$Stub$Proxy.getLine1NumberForDisplay(ITelephony.java:4874)
at android.telephony.TelephonyManager.getLine1NumberForSubscriber(TelephonyManager.java:2447)
at android.telephony.TelephonyManager.getLine1Number(TelephonyManager.java:2425)
at com.a1tech.recorder.RecorderService.onCreate(RecorderService.java:106)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3807)
at android.app.ActivityThread.access$2100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7225)
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)
안드로이드6 이상에서 앱의 권한을 허용해주기 위한 방법은 다음과 같다.
그냥 쉽게 말해서 설정 -> 애플리케이션 관리자 -> 해당앱 -> 애플리케이션 정보 -> 권한 으로 들어가 권한을 허용시켜주면된다.
***** 추가사항 *****
마켓에 올려도 해결안된다. 기존처럼 설치시에 권한을 할당받으려면 targetSDK 버전을 낮춰야한다.
그런데 이미 한번 sdk버전을 올려서 마켓등록을 했을경우 sdk버전을 다운시키는건 또 안된다.
그렇다면 6이상에서 권한할당을 받기 위해서는 어떻게 해야할까?
앱실행시 권한체크하는 부분을 넣어서 권한이 없다면 권한설정페이지로 보내는 작업을 진행해야한다;;;;
이건 뭐 보안은 둘째치고 너무 번거롭게 만든다. 기존앱들 다 권한설정 따로 안해줘도 잘만되는데 이것만 괜히 불편하게 만들었다고 불평이 나와도 할말이없는 상황이다.
보안은 둘째치고 사용자 편의성을 위해 targetSDK버전을 낮추자.
'IT > Android' 카테고리의 다른 글
안드로이드 Push 서비스를 사용할 때 특정 폰에서만 푸시가 동작하지 않는다면? (0) | 2017.02.16 |
---|---|
Android 개발시 Wifi 로 연결하여 개발하기 (0) | 2016.06.07 |