안드로이드에서 permission을 추가해도 안 될 때는 어쩌죠?

조회수 3760회

안드로이드에서 SMS를 보내려고 하는데요. sms 보내기를 하면 아래 같은 에러가 발생해요.

09-17 18:37:29.974  12847-12847/**.**.****E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: **.**.****, PID: 12847
java.lang.SecurityException: Sending SMS message: uid 10092 does not have android.permission.SEND_SMS.
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.os.Parcel.readException(Parcel.java:1552)
        at com.android.internal.telephony.ISms$Stub$Proxy.sendTextForSubscriber(ISms.java:768)
        at android.telephony.SmsManager.sendTextMessageInternal(SmsManager.java:310)
        at android.telephony.SmsManager.sendTextMessage(SmsManager.java:293)
        at **.**.****.MainActivity$3.onClick(MainActivity.java:70)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

퍼미션 때문인줄 알고 아래처럼 퍼미션도 줬는데도 에러가 발생해요.

<?xml version="1.0" encoding="utf-8"?>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-feature android:name="andrdoi.hardware.telephony"
    android:required="true"/>

<application
    android:exported="true"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

인터넷으로 검색해봤는데 뭐때문인지 모르겠네요.. 이거 때문인가요? 도와주세요..

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    targetSdkVersion이 23이거나 그거보다 높고, 요구하는 퍼미션이 "위험" 등급이기 때문입니다. 안드로이드 6.0부터는 아래의 퍼미션들은 런타임으로 퍼미션을 승인 받아야합니다.

    • ACCESS_COARSE_LOCATION
    • ACCESS_FINE_LOCATION
    • ADD_VOICEMAIL
    • BODY_SENSORS
    • CALL_PHONE
    • CAMERA
    • GET_ACCOUNTS
    • PROCESS_OUTGOING_CALLS
    • READ_CALENDAR
    • READ_CALL_LOG
    • READ_CELL_BROADCASTS
    • READ_CONTACTS
    • READ_EXTERNAL_STORAGE
    • READ_PHONE_STATE
    • READ_SMS
    • RECEIVE_MMS
    • RECEIVE_SMS
    • RECEIVE_WAP_PUSH
    • RECORD_AUDIO
    • SEND_SMS
    • USE_SIP
    • WRITE_CALENDAR
    • WRITE_CALL_LOG
    • WRITE_CONTACTS
    • WRITE_EXTERNAL_STORAGE

    이런 퍼미션들은 targetSdkVersion 23이상에서 이 필요 없습니다. 하지만 안드로이드 6.0이상의 디바이스에서는 checkSelfPermission() 와 requestPermissions()를 이용해 런타임으로 퍼미션을 승인해주게끔 프로그래밍 해주셔야합니다.

    이러한 과정은 처음엔 조금 까다로울 수 있으니 일단 급한 불을 끄고싶으시다면 targetSdkVersion을 23 아래로 낮추시면 될겁니다.

    그게 아니라면 안드로이드 도큐멘테이션에 runtime permission에 관한 토픽이있으니 참고해보시기 바랍니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.