본문 바로가기

안드로이드 프로그래밍

[안드로이드] 문자보내기 문자인증 SMS 보내기

반응형

 

SDK version22이상에 SMS를 보내기 위해서는 먼저 권한을 얻어야 합니다.
권한없이 SMS를 보내면 에러없이 프로그램이 종료됩니다. 이부분 찾기가 어려웠습니다.
Exception으로 확인하여보니 Sending SMS message: uid 00000 does not have android.permission.SEND_SMS.

해결책으로는 AndroidManifest.xml 파일에 아래부분을 추가해준다.

<uses-permission android:name="android.permission.SEND_SMS"/>
SMS보내는 부분입니다. 아래처럼 권한받는 코드를 넣어주고 권한이 있다면 문자를 전송합니다.
public void SmsSend(String strPhoneNumber, String strMsg){

    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.SEND_SMS)
            != PackageManager.PERMISSION_GRANTED) {//권한이 없다면

        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.SEND_SMS},
                PERMISSIONS_REQUEST_SEND_SMS);
    }else { //권한이 있다면 SMS를 보낸다.

        PendingIntent sendIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
        PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);


        SmsManager smsManager = SmsManager.getDefault();
        try {
            smsManager.sendTextMessage(strPhoneNumber, null, strMsg, sendIntent, deliveredIntent);
        } catch (Exception ex) {
            ex.printStackTrace();
            Toast.makeText(getBaseContext(), ex.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }
}

if(Contextcompt~~~) //부분은 권한을 확인하고 권한 받는 부분이에요

else 구분이 SMS 발송부분이에요

버튼을 클릭하면 SMS 전송 SmsSend()호출

Button btnSmsSend = findViewById(R.id.btnSmsSend);
btnSmsSend.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String strPhoneNumber = etPhoneNumber.getText().toString().replaceAll("[^0-9]", "");
        if(strPhoneNumber.equals("") || strPhoneNumber.length() < 10){
            Toast.makeText(getApplicationContext(),"전화번호를 확인하세요",Toast.LENGTH_LONG).show();
            return;

        }
        SmsSend(strPhoneNumber, "The test sms-123456");
    }
});
public class MainActivity extends AppCompatActivity {

    private static final int PERMISSIONS_REQUEST_SEND_SMS=2323;

테스트 해보니 정상적으로 작동 되네요

참고로 유심이 있는 문자가 정상적으로 발송되는 전화기로 테스트해야 합니다.

728x90