ACTION_SEND used to send sms

后端 未结 5 1122
故里飘歌
故里飘歌 2021-01-04 19:23

I want to open native application to send sms but there should be already phone number. I found ACTION_SEND but when I\'m calling my function it\'s return error that:

<
相关标签:
5条回答
  • 2021-01-04 19:44

    In kotlin following code works with number and custom message

    val defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity)  
                val sendIntent = Intent(Intent.ACTION_SEND)
                sendIntent.type = "text/plain"
                sendIntent.putExtra("address", "sms:"+contactNumber)
                sendIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_msg_body))
                Timber.e("defaultSmsPackageName: "+defaultSmsPackageName)
                if (defaultSmsPackageName != null){ //Can be null in case that there is no default, then the user would be able to choose any app that support this intent.
                    sendIntent.setPackage(defaultSmsPackageName)
                    activity!!.startActivity(sendIntent)
                }
    
    0 讨论(0)
  • 2021-01-04 19:45

    I think you should use the following code:

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);
    
    //use to fill the sms body
    StringBuilder uri = new StringBuilder("sms:" + mobilenumber);
    sendIntent.putExtra("sms_body", "");
    sendIntent.setType("vnd.android-dir/mms-sms");
    sendIntent.setData("");
    startActivity(sendIntent);
    

    I think this may help you.

    0 讨论(0)
  • 2021-01-04 19:56

    On my side, the intent without uri parameter work for all devices, except for Pixel Phone where I need to use it, so I check the 2 ways:

        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        final Context context = activity.getApplicationContext();
        final String phoneNumber = "1234567890";
        final String msg = "Hello!";
        smsIntent.putExtra("address", phoneNumber);
        smsIntent.putExtra("sms_body", msg);
        smsIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP |
                Intent.FLAG_ACTIVITY_CLEAR_TOP);
    
        final PackageManager manager = context.getPackageManager();
        List<ResolveInfo> infos = manager.queryIntentActivities(smsIntent, 0);
        if (infos.size() <1) {
            //No Application can handle your intent
            //try in a another way ...
            Uri uri = Uri.parse("smsto:"+phoneNumber);
            smsIntent = new Intent(Intent.ACTION_SENDTO, uri);
            smsIntent.putExtra("sms_body", msg);
            infos = manager.queryIntentActivities(smsIntent, 0);
        }
    
        if (infos.size() <1) {
            //No Application can handle your intent
            Log.e("SendMessage","No Application can handle your SMS intent");
        }
    
    0 讨论(0)
  • 2021-01-04 20:07

    Why, this should work fine. http://developer.android.com/reference/android/content/Intent.html#ACTION_SENDTO

    Check out my code:

    Uri uri = Uri.parse("smsto:0800000123");   
    Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
    it.putExtra("sms_body", "The SMS text");   
    startActivity(it); 
    
    0 讨论(0)
  • 2021-01-04 20:08

    Thanks for the info ! Here is my solution using the previous info:

    if (url.indexOf("tel:") > -1) {
        startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
        return true;
    }
    else if (url.indexOf("sms:") > -1){
        startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
        return true;
    }
    

    Best regards.

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