Java 通过Android应用程序发送短信而不移动到消息框默认应用程序

Java 通过Android应用程序发送短信而不移动到消息框默认应用程序,java,android,Java,Android,我想问你: 1-如何通过我的应用程序发送SMS而不将用户移动到消息框 我只想允许用户插入文本,然后他/她点击发送按钮 之后,直接将短信发送到我在代码中写的特定号码 我使用了如下所示的代码,它运行良好,但它将我移动到了消息框:( 有什么建议吗 MyButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // TODO Auto-

我想问你: 1-如何通过我的应用程序发送SMS而不将用户移动到消息框 我只想允许用户插入文本,然后他/她点击发送按钮 之后,直接将短信发送到我在代码中写的特定号码

我使用了如下所示的代码,它运行良好,但它将我移动到了消息框:( 有什么建议吗

MyButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                String str= MyEditText.getText().toString();
                // For SMS
                Uri smsUri = Uri.parse("I wrote my number here");
                Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
                intent.putExtra("sms_body", "Besm Allah");
                intent.setType("vnd.android-dir/mms-sms"); startActivity(intent);
            }
        });
==================================更新后================================


您必须使用提供的意图。这允许用户选择使用哪个应用发送短信。这是Android的设计方式。它让用户选择应用如何发送短信

如果您希望在用户不使用其选择的应用程序的情况下发送SMS,则您需要使用商业提供商(如esendex)提供的SMS API,并向他们支付费用以便为您发送SMS

//---sends an SMS message to another device---
private void sendSMS(String phoneNumber, String message)
{        
    PendingIntent pi = PendingIntent.getActivity(this, 0, new Intent(this, SMS.class), 0);                
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, pi, null);        
} 
花一段时间了解所有参数对您的作用


此外,这段代码片段来自于以下教程:

您正在使用一个Intent对象(新Intent(Intent.ACTION\u VIEW…),它调用内置SMS应用程序来帮助您发送SMS消息。因此,您将被重定向到消息框


要完成发送消息的过程而不直接发送到消息框,您需要使用
pendingent
。请看这本很棒的SMS教程,它很可能会解决您的问题。

我找到了完美的解决方案:

// Inside OnCreate()
Send.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                HelperWordStr= HelperWords.getText().toString();
                // For SMS
                if (!b) {
                    try {
                                                    sendSMS("Receiver Number", HelperWordStr);
                        Toast.makeText(ChattingPage.this, "SMS Sent", Toast.LENGTH_LONG)
                                .show();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        Toast.makeText(ChattingPage.this, e.getMessage(),
                                Toast.LENGTH_LONG).show();
                    }

                }
            }
        });

// Outside 

    public void sendSMS(String number, String msg) throws Exception {
        if (!b) {
            SmsManager smsManager = SmsManager.getDefault();
            smsManager.sendTextMessage(number, null, msg, null, null);
        }
        b = true;
    }

谢谢,但你能解释一下你的第二句话吗?如果你的意思是我们必须向网络提供商付费,我们确实和他们谈过,我们将使用唯一号码作为接收者号码(我们的服务器),正因为如此,我们应该隐藏向用户发送短信的步骤,并将其显示为Whatsapp中的聊天?希望我的问题现在更清楚…使用
sendTextMessage(电话号码、null、message、sentPI、deliveredPI)
SMSManager的方法@imrankhan非常感谢,你的意思是这是一个内置函数吗?如果是,sendPI和deliverdPI的意思是什么?你是指通过电话号码的接收者号码吗???非常感谢…是的,这是SMSManager中的内置函数:sentPI是一个用于接收已发送的交付报告、deliverdPI和用于接收送达报告的PendingEvent,我们要向其发送短信的电话号码和null是服务中心号码。有关更多帮助,请参阅@imrankhan。您知道此代码有什么问题吗?您正在使用
android.telephony.gsm.smsmsmanager
,该代码已被弃用。请参阅
android.telephony.SmsManager
。请检查是否有问题即时战略