Using the native sms app to send an sms without launching itself

前端 未结 5 1144
忘掉有多难
忘掉有多难 2020-12-15 14:48

I want to send an SMS, but not using the SmsManager class. I want to do it with the native SMS app which is there on an Android phone.

And here is the twist : I do

相关标签:
5条回答
  • 2020-12-15 15:16

    Try this:

    String phoneNo = textPhoneNo.getText().toString();
    String sms = textSMS.getText().toString();
    
    
    
    try {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(phoneNo, null, sms, null, null);
        Toast.makeText(getApplicationContext(), "SMS Sent!",
            Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        Toast.makeText(getApplicationContext(),
            "SMS faild, please try again later!",
            Toast.LENGTH_LONG).show();
        e.printStackTrace();
    }
    
    0 讨论(0)
  • Using the SmsManager will send the sms through the system but will not put it in the SMS content provider as was mentioned earlier. Hence any native messaging app will not see it.

    To do so, you have to add it manually via the SMS content provider AFTER you send the message normally via SmsManager. Here's some sample code to help:

    ContentValues values = new ContentValues();
    values.put("address", "+12345678"); // phone number to send
    values.put("date", System.currentTimeMillis()+""); 
    values.put("read", "1"); // if you want to mark is as unread set to 0
    values.put("type", "2"); // 2 means sent message
    values.put("body", "This is my message!");
    
    Uri uri = Uri.parse("content://sms/");
    Uri rowUri = context.getContentResolver().insert(uri,values);
    

    And that's all. After that you'll notice that it's added and the native messaging app displays it normally.

    Please click "accept" answer if it works out for you.

    0 讨论(0)
  • 2020-12-15 15:23

    If you only have ACTION_SENDTO, then, of course, any application that can send will pop up.

    You need to add a filter for SMS

    • with URL. See https://stackoverflow.com/a/2372665/94363
    • or with content type https://stackoverflow.com/a/10613013/94363
    0 讨论(0)
  • 2020-12-15 15:34

    I have done something similar in a project I was working on. You need to use SmsManager

    It would be something like this -

            SmsManager smsManager = SmsManager.getDefault();
    
            smsManager.sendTextMessage(phoneNumber, null, message, null, null);
    

    You can use this to send an SMS programatically.

    0 讨论(0)
  • 2020-12-15 15:38

    Ok, so you want to send a SMS, without using SmsManager and plus it should show up in your native SMS app list?

    Firstly, you cannot send SMS bypassing SmsManager. If you look at the source code of all native messaging app for Samsung Galaxy Nexus, it will invoke SmsManager on button click.

    so, the below piece of code as posted above is correct

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, null, null);
    

    Secondly, after sending the message, native apps put it into into SMS ContentProvider

    follow this How to save SMS to inbox in android?

    Word of caution is that now adding to this is not supported. So you may have to resort to a hack to add it into the sent box.

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