web-dev-qa-db-ja.com

SMS(ユーザーが承認する必要なく)を自動的に送信できますか)

私はAndroidが初めてです。 SMSアプリケーションからAndroidを送信しようとしています。 SMSインテントを使用する場合、SMSウィンドウが開き、ユーザーはSMSを承認して送信する必要があります。

ユーザーが確認せずにSMSを自動的に送信する方法はありますか?

ありがとう、Lior

33
user733284

このメソッドを使用して、SMSを送信できます。 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);
            }
    }
}

更新

piSendおよびpiDeliveredは保留中のインテントであり、メソッドが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();
      }
  };

アクティビティの以下の行を使用して登録できます

registerReceiver(receiver, new IntentFilter(SMS_SENT));  // SMS_SENT is a constant

また、onDestroyでブロードキャストを登録解除することを忘れないでください

@Override
protected void onDestroy() {
    unregisterReceiver(receiver);
    super.onDestroy();
}
39
Sunny

アプリケーションがAndroidManifest.xmlに次のアクセス許可を持っている場合

<uses-permission Android:name="Android.permission.SEND_SMS"/>

必要なだけSMSを送信できます

SmsManager manager = SmsManager.getDefault();
manager.sendTextMessage(...);

そしてそれがすべてです。

18
fampinheiro

はい、送信できますSMSを使用して、 SmsManager 。アプリケーションで SEND_SMS これが機能するための許可。

7
Josef Pfleger

はい、ユーザーの操作なしでSMSを送信できます...しかし、ユーザーがSMSを1つの番号にのみ送信したい場合は動作します。

try {    
    SmsManager.getDefault().sendTextMessage(RecipientNumber, null,    
    "Hello SMS!", null, null);    
} catch (Exception e) {    
    AlertDialog.Builder alertDialogBuilder = new    
    AlertDialog.Builder(this);    
    AlertDialog dialog = alertDialogBuilder.create();    
    dialog.setMessage(e.getMessage());    
    dialog.show();    
}    

また、マニフェストのアクセス許可を追加します。

<uses-permission Android:name="Android.permission.SEND_SMS"/>
2
Nikhil