sendTextMessage(phoneNumber, null, message, null, null); always returns success even when message not sent

前端 未结 3 952
走了就别回头了
走了就别回头了 2021-01-22 06:55

I tried sms activity using this link but the problem is that it always gives \"message sent\" how to know if the message is really sent!

here is code

try         


        
相关标签:
3条回答
  • 2021-01-22 07:10

    Try this:

    Add this inside manifest.xml:

    <uses-permission android:name="android.permission.SEND_SMS">
    

    main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <TextView  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:text="Enter the phone number of recipient"
            />     
        <EditText 
            android:id="@+id/txtPhoneNo"  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"        
            />
        <TextView  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"         
            android:text="Message"
            />     
        <EditText 
            android:id="@+id/txtMessage"  
            android:layout_width="fill_parent" 
            android:layout_height="150px"
            android:gravity="top"         
            />          
        <Button 
            android:id="@+id/btnSendSMS"  
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            android:text="Send SMS"
            />    
    </LinearLayout>
    

    MainActivity:

    public class SMS extends Activity 
    {
        Button  btnSendSMS;
        EditText txtPhoneNo;
        EditText txtMessage;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);        
    
            btnSendSMS = (Button ) findViewById(R.id.btnSendSMS);
            txtPhoneNo = (EditText) findViewById(R.id.txtPhoneNo);
            txtMessage = (EditText) findViewById(R.id.txtMessage);
    
            btnSendSMS.setOnClickListener(new View .OnClickListener() 
            {
                public void onClick(View  v) 
                {                
                    String  phoneNo = txtPhoneNo.getText().toString();
                    String  message = txtMessage.getText().toString();                 
                    if (phoneNo.length()>0 && message.length()>0)                
                        sendSMS(phoneNo, message);                
                    else
                        Toast.makeText(getBaseContext(), 
                            "Please enter both phone number and message.", 
                            Toast.LENGTH_SHORT).show();
                }
            });        
        }    
    }
    

    sendSMS() function:

    public class SMS extends Activity 
    {
        //...
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            //...
        }
    
        //---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);        
        }    
    }
    

    //---sends an SMS message to another device---:

    private void sendSMS(String  phoneNumber, String  message)
        {        
            String  SENT = "SMS_SENT";
            String  DELIVERED = "SMS_DELIVERED";
    
            PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
                new Intent(SENT), 0);
    
            PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
                new Intent(DELIVERED), 0);
    
            //---when the SMS has been sent---
            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context  arg0, Intent arg1) {
                    switch (getResultCode())
                    {
                        case Activity.RESULT_OK:
                            Toast.makeText(getBaseContext(), "SMS sent", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                            Toast.makeText(getBaseContext(), "Generic failure", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NO_SERVICE:
                            Toast.makeText(getBaseContext(), "No service", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_NULL_PDU:
                            Toast.makeText(getBaseContext(), "Null PDU", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case SmsManager.RESULT_ERROR_RADIO_OFF:
                            Toast.makeText(getBaseContext(), "Radio off", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                    }
                }
            }, new IntentFilter(SENT));
    
            //---when the SMS has been delivered---
            registerReceiver(new BroadcastReceiver(){
                @Override
                public void onReceive(Context  arg0, Intent arg1) {
                    switch (getResultCode())
                    {
                        case Activity.RESULT_OK:
                            Toast.makeText(getBaseContext(), "SMS delivered", 
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case Activity.RESULT_CANCELED:
                            Toast.makeText(getBaseContext(), "SMS not delivered", 
                                    Toast.LENGTH_SHORT).show();
                            break;                        
                    }
                }
            }, new IntentFilter(DELIVERED));        
    
            SmsManager sms = SmsManager.getDefault();
            sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);        
        }
    

    Code source: http://mobiforge.com/developing/story/sms-messaging-android

    0 讨论(0)
  • 2021-01-22 07:21

    In the mentioned link, there is no PendingIntent set for deliveryIntent or sentIntent in order to receive the status of message you need to send PendingIntent. See this link

    0 讨论(0)
  • I also faced similar NPE scenario but problem at my end was due to wrong phone number.

    So you must also check if phone number was correct or not.

    0 讨论(0)
提交回复
热议问题