예전에 잘 사용하던 기능이었는데 갑자기
does not have android.permission.SEND_SMS
문구가 뜨면서 안되는 경우가 발생했습니다.
문제는 API 23 이상버전을 사용했을때 요런 문제가 생기네요. ㅠㅠ
먼저 AndroidManifest.xml 파일일에 다음과 같은 권한을 줍니다.
<uses-permission android:name="android.permission.SEND_SMS" />
그리고 문자보내기 해결방법은 아래와 같이 수정해서 해결했어요
// 먼저 핸드폰의 주소록을 불러와서 문자를 보낼 사람과 전화번호을 알아오도록 해 줍니다. public void sendBySMS() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(intent, REQ_CODE_SMS_ADDRESS);
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent data) {
switch (requestCode) {
case REQ_CODE_SMS_ADDRESS:
if (responseCode == RESULT_OK) {
Cursor cursor = getContentResolver().query(data.getData(),
new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
cursor.moveToFirst();
mName = cursor.getString(0);
mMobileNumber = cursor.getString(1);
cursor.close();
// 문자보내기를 호출합니다.
smsMessageSent();
}
break;
}}
// 아래와 같은 방법으로 문자를 보내줍니다.
public void smsMessageSent() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse( "sms:" + mMobileNumber ) );
intent.putExtra( "sms_body", mContentToSend );
startActivity(intent);
}
아래는 제가 예전부터 사용하던 코드였는데 API 23 버전부터는 권한 문제가 생기네요
참고해 보세요
public void smsMessageSent() {
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
//---when the SMS has been sent---
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(getBaseContext(), "문자 메시지가 전송되었습니다.", Toast.LENGTH_SHORT).show();
break;
}
}
}, new IntentFilter(SENT));
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(mMobileNumber, null, mContentToSend, sentPI, deliveredPI);
}
최근댓글