반응형
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