SmsManager (SMS 관리자)
이 섹션 소개:
이 섹션에서는 Android의 SmsManager(Short Message Manager)를 소개합니다. 이름에서 알 수 있듯이 휴대폰 문자 메시지를 관리하는 데 사용됩니다. 이러한 유형의 애플리케이션 시나리오는 많지 않습니다. 일반적으로 우리는 문자 메시지를 보낼 때만 이 API를 사용합니다. 문자 메시지는 MMS로 보내기에는 너무 복잡하고, QQ, 위챗, 각종 소셜 앱이 횡행하는 시대에는 1위안이면 문자 메시지 하나를 보내게 된다. MMS? 따라서 이 섹션에서는 일반적인 문자 메시지 보내기에 대해서만 설명합니다! 공식 문서: SmsManager
1. 문자 메시지를 보내기 위해 시스템을 호출합니다:
는 서면 수신자와 내용을 시스템의 문자 메시지 전송 인터페이스로 보내는 것입니다. 사용자는 클릭하기 전에 수신자 내용이 올바른지 확인합니다. 보내다! 직설적으로 말하면 시스템의 문자 메시지 창을 호출하는 것입니다. 여기에는 다음과 같은 이점이 있습니다.
이 방법으로 문자 메시지를 보내면 문자 메시지 보내기 권한을 하나 적게 작성하고 보안을 유지할 수 있습니다. 앱을 설치하면 360과 같은 소프트웨어도 함께 설치됩니다. 사용자에게 "이 앱에는 SMS 권한이 있으므로 비밀리에 문자 메시지를 보낼 수 있습니다."라는 알림이 표시되지 않습니다. 그리고 사용자는 비밀리에 문자 메시지를 보내는 것에 대해 매우 우려하고 있습니다. 물론, 보지 않고 설치하는 사람도 있고, 몰래 문자 메시지를 보낼 수 있다고 생각하는 사람도 있을 것이다. 또는 당사 앱에서 문자 메시지를 보내는 것을 직접 금지하면 당사 앱에서 문자 메시지를 보낼 때 일부 이상이 발생할 수 있습니다. 응용 프로그램이 직접 충돌하는 등의 현상이 발생합니다! 따라서 애플리케이션에서 확인 또는 결제를 위해 SMS를 보내야 하는 경우 이 방법을 사용하는 것이 좋습니다!
핵심 코드:
public void SendSMSTo(String phoneNumber,String message){ //判断输入的phoneNumber是否为合法电话号码 if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){ //Uri.parse("smsto") 这里是转换为指定Uri,固定写法 Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber)); intent.putExtra("sms_body", message); startActivity(intent); } }
2 SMS를 보내려면 시스템에서 제공하는 SMS 인터페이스를 호출하세요. 문자 메시지 보내기 권한이 필요합니다
uses-permission android:name="android.permission.SEND_SMS"
/>문자 메시지를 보내기 위해 SmsManager에서 제공하는 SMS 인터페이스를 직접 호출합니다:
sendTextMessage
( DestinationAddress, scAddress, text, sentIntent, DeliverIntent);매개변수는 다음과 같습니다.
- destinationAddress: 수신자의 전화번호
- scAddress: SMS 센터 번호, null인 경우 현재 기본 SMS 서비스 센터 사용
- text: SMS 내용
- sentIntent: 정보 SMS 발송 상태에 대해 :(의도 발송 상태) null이 아닌 경우 이 PendingIntent는 메시지가 성공적으로 전송되거나 실패할 때 브로드캐스트됩니다. 결과 코드는 Activity.RESULT_OK입니다. 성공 또는 RESULT_ERROR_GENERIC_FAILURE, RESULT_ERROR_RADIO_OFF, RESULT_ERROR_NULL_PDU를 나타냅니다. 하나는 오류를 나타냅니다. RESULT_ERROR_GENERIC_FAILURE에 따라 sentIntent에는 다음을 포함하는 추가 "오류 코드"가 포함될 수 있습니다. 일반적으로 오작동을 수정할 때만 유용한 무선 기술 관련 값입니다. 모든 SMS 기반 애플리케이션은 sentIntent 감지를 제어합니다. sentIntent가 비어 있으면 호출자는 알 수 없는 모든 애플리케이션을 감지하므로 감지 시 전송되는 SMS 수가 더 적어집니다.
- deliverIntent: 상대방이 문자 메시지를 수신했는지 여부에 대한 상태 정보: (수신 의도 상태) null이 아닌 경우 이 메시지가 수신자에게 전송되면 PendtingIntent가 브로드캐스트됩니다. 상태 보고서에서 생성된 PDU(Peer 레벨 간에 전송되는 데이터 단위 참조)는 데이터("pdu")로 확장됩니다
... 이렇게 복잡해, pdu가 뭐죠? 좋아요, 걱정하지 마세요.
전화번호, 메시지 센터, 문자 메시지 내용, 전송 성공 여부 모니터링, 수신자가 모니터링 수락 여부 등의 매개변수만 알아두세요!
핵심 코드
public void sendSMS(String phoneNumber,String message){ //获取短信管理器 android.telephony.SmsManager smsManager = android.telephony.SmsManager.getDefault(); //拆分短信内容(手机短信长度限制),貌似长度限制为140个字符,就是 //只能发送70个汉字,多了要拆分成多条短信发送 //第四五个参数,如果没有需要监听发送状态与接收状态的话可以写null List divideContents = smsManager.divideMessage(message); for (String text : divideContents) { smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI); } }
문자 메시지가 성공적으로 전송되었는지 또는 수신자가 메시지를 받았는지 여부도 모니터링해야 할 수도 있습니다. 다음을 추가하세요.
1) 반환되는 sentIntent
//处理返回的发送状态 String SENT_SMS_ACTION = "SENT_SMS_ACTION"; Intent sentIntent = new Intent(SENT_SMS_ACTION); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0); //注册发送信息的广播接收者 context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: //普通错误 break; case SmsManager.RESULT_ERROR_RADIO_OFF: //无线广播被明确地关闭 break; case SmsManager.RESULT_ERROR_NULL_PDU: //没有提供pdu break; case SmsManager.RESULT_ERROR_NO_SERVICE: //服务当前不可用 break; } } }, new IntentFilter(SENT_SMS_ACTION));를 처리하세요.
2) 수신 상태를 반환하는 deliverIntent를 처리합니다.
//处理返回的接收状态 String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; //创建接收返回的接收状态的Intent Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0,deliverIntent, 0); context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { Toast.makeText(context,"收信人已经成功接收", Toast.LENGTH_SHORT).show(); } }, new IntentFilter(DELIVERED_SMS_ACTION));
또한 이는 방송에 대한 지식이 필요하다면 다음을 읽어보세요.