我可以自动发送短信(无需用户需要批准)

use*_*284 33 sms android android-activity

我对Android很新.我试图从Android应用程序发送短信.使用SMS Intent时,SMS窗口打开,用户需要批准SMS并发送.

有没有办法在没有用户确认的情况下自动发送短信?

谢谢,Lior

Sun*_*nny 39

您可以使用此方法发送短信.如果sms大于160个字符,则使用sendMultipartTextMessage.

private void sendSms(String phonenumber,String message, boolean isBinary)
{
    SmsManager manager = SmsManager.getDefault();

    PendingIntent piSend = PendingIntent.getBroadcast(this, 0, new Intent(SMS_SENT), 0);
    PendingIntent piDelivered = PendingIntent.getBroadcast(this, 0, new Intent(SMS_DELIVERED), 0);

    if(isBinary)
    {
            byte[] data = new byte[message.length()];

            for(int index=0; index<message.length() && index < MAX_SMS_MESSAGE_LENGTH; ++index)
            {
                    data[index] = (byte)message.charAt(index);
            }

            manager.sendDataMessage(phonenumber, null, (short) SMS_PORT, data,piSend, piDelivered);
    }
    else
    {
            int length = message.length();

            if(length > MAX_SMS_MESSAGE_LENGTH)
            {
                    ArrayList<String> messagelist = manager.divideMessage(message);

                    manager.sendMultipartTextMessage(phonenumber, null, messagelist, null, null);
            }
            else
            {
                    manager.sendTextMessage(phonenumber, null, message, piSend, piDelivered);
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

更新

piSend和piDelivered是Pending Intent当方法完成发送SMS时,它们可以触发广播

这是广播接收器的示例代码

    private BroadcastReceiver receiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String message = null;

            switch (getResultCode()) {
            case Activity.RESULT_OK:
                message = "Message sent!";
                break;
            case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                message = "Error. Message not sent.";
                break;
            case SmsManager.RESULT_ERROR_NO_SERVICE:
                message = "Error: No service.";
                break;
            case SmsManager.RESULT_ERROR_NULL_PDU:
                message = "Error: Null PDU.";
                break;
            case SmsManager.RESULT_ERROR_RADIO_OFF:
                message = "Error: Radio off.";
                break;
            }

            AppMsg.makeText(SendMessagesWindow.this, message,
                    AppMsg.STYLE_CONFIRM).setLayoutGravity(Gravity.BOTTOM)
                    .show();
      }
  };
Run Code Online (Sandbox Code Playgroud)

并且您可以在活动中使用以下行注册它

registerReceiver(receiver, new IntentFilter(SMS_SENT));  // SMS_SENT is a constant
Run Code Online (Sandbox Code Playgroud)

另外不要忘记在onDestroy中取消注册广播

@Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

  • 你太棒了 (5认同)

fam*_*iro 18

如果您的应用程序在AndroidManifest.xml中具有以下权限

<uses-permission android:name="android.permission.SEND_SMS"/>
Run Code Online (Sandbox Code Playgroud)

您可以根据需要发送尽可能多的短信

SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);
Run Code Online (Sandbox Code Playgroud)

这就是全部.


Jos*_*ger 7

是的,您可以使用发送短信SmsManager.请记住,您的应用程序需要SEND_SMS获得此权限才能使用.