通过意图发送短信

时间:2012-03-21 04:37:40

标签: android android-intent sms

我想通过意图发送短信,但是当我使用此代码时,它会将我重定向到错误的联系人:

Intent intentt = new Intent(Intent.ACTION_VIEW);         
intentt.setData(Uri.parse("sms:"));
intentt.setType("vnd.android-dir/mms-sms");
intentt.putExtra(Intent.EXTRA_TEXT, "");
intentt.putExtra("address",  phone number);
context.startActivity(intentt);

为什么呢?此外,我知道一种方法来跟踪短信发送,但我不知道如何编码:

Starting activity: Intent { 
   act=android.intent.action.SENDTO dat=smsto:%2B**XXXXXXXXXXXX** flg=0x14000000    
   cmp=com.android.mms/.ui.ComposeMessageActivity }

XXXXXXXXXXXX是电话号码。

11 个答案:

答案 0 :(得分:74)

我从一个博客开发了这个功能。您可以通过两种方式发送短信。

  1. 打开原生短信作曲家
  2. 撰写您的消息并从您的Android应用程序发送
  3. 这是第一种方法的代码。

    <强> main.xml中

    <?xml version="1.0" encoding="utf-8"?>  
        <RelativeLayout  
            android:id="@+id/relativeLayout1"  
            android:layout_width="fill_parent"  
            android:layout_height="fill_parent"  
            xmlns:android="http://schemas.android.com/apk/res/android">  
    
                <Button  
                    android:id="@+id/btnSendSMS"  
                   android:layout_height="wrap_content"  
                   android:layout_width="wrap_content"  
                   android:text="Send SMS"  
                   android:layout_centerInParent="true"  
                   android:onClick="sendSMS">  
               </Button>  
       </RelativeLayout>
    

    <强>活动

    public class SendSMSActivity extends Activity {  
         /** Called when the activity is first created. */  
         @Override  
         public void onCreate(Bundle savedInstanceState) {  
             super.onCreate(savedInstanceState);  
             setContentView(R.layout.main);  
          }  
    
         public void sendSMS(View v)  
         {  
             String number = "12346556";  // The number on which you want to send SMS  
             startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", number, null)));  
         }  
        /* or 
         public void sendSMS(View v) 
          { 
         Uri uri = Uri.parse("smsto:12346556"); 
             Intent it = new Intent(Intent.ACTION_SENDTO, uri); 
             it.putExtra("sms_body", "Here you can set the SMS text to be sent"); 
             startActivity(it); 
          } */  
     }
    

    注意: - 在此方法中,您不需要AndroidManifest.xml文件中的SEND_SMS权限。

    对于第二种方法,请参阅此BLOG。你会从这里找到一个很好的解释。

    希望这会对你有帮助......

答案 1 :(得分:47)

Uri uri = Uri.parse("smsto:YOUR_SMS_NUMBER");   
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);   
intent.putExtra("sms_body", "The SMS text");   
startActivity(intent);  

答案 2 :(得分:29)

Intent smsIntent = new Intent(android.content.Intent.ACTION_VIEW);
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address","your desired phoneNumber");         
smsIntent.putExtra("sms_body","your desired message");
startActivity(smsIntent);

希望对某人有所帮助

答案 3 :(得分:6)

试试这段代码。它会起作用

Uri smsUri = Uri.parse("tel:123456");
Intent intent = new Intent(Intent.ACTION_VIEW, smsUri);
intent.putExtra("sms_body", "sms text");
intent.setType("vnd.android-dir/mms-sms"); 
startActivity(intent);

希望这会对你有所帮助。

答案 4 :(得分:3)

希望这是有效的,这可以在我的应用程序中使用

SmsManager.getDefault().sendTextMessage("Phone Number", null, "Message", null, null);

答案 5 :(得分:1)

这是使用SMSManager的另一种解决方案:

SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage("PhoneNumber-example:+989147375410", null, "SMS Message Body", null, null);

答案 6 :(得分:1)

try {
    Method setStyleClass = component.getClass().getMethod("setStyleClass", String.class);
    if (setStyleClass != null) {
        setStyleClass.invoke(component, "my-class");
    }
} catch (SecurityException e) {} 
catch (NoSuchMethodException e) {}
catch (IllegalArgumentException e) {}
catch (IllegalAccessException e) {}
catch (InvocationTargetException e) {}

答案 7 :(得分:1)

   Uri uriSms = Uri.parse("smsto:1234567899");   
   Intent intentSMS = new Intent(Intent.ACTION_SENDTO, uriSms);   
   intentSMS.putExtra("sms_body", "The SMS text");   
   startActivity(intentSMS); 

答案 8 :(得分:1)

  1. 清单权限(您可以将其放在“应用程序”之后或之前)
 uses-permission android:name="android.permission.SEND_SMS"/>
  1. 例如创建一个按钮并编写下面的代码(如Prem在此线程之前编写的),然后将下面的phone_Number替换为实际数字,它将起作用:
startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", "phone_Number", null)));

答案 9 :(得分:0)

如果您想要特定的消息,请使用此:

String phoneNo = "";//The phone number you want to text
String sms= "";//The message you want to text to the phone

Intent smsIntent = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", phoneNo, null));
smsIntent.putExtra("sms_body",sms);
startActivity(smsIntent);

答案 10 :(得分:0)

添加try-catch,否则没有sim卡的手机将崩溃。

void sentMessage(String msg) {
    try {
        Intent smsIntent = new Intent(Intent.ACTION_VIEW);
        smsIntent.setType("vnd.android-dir/mms-sms");
        smsIntent.putExtra("sms_body", msg);
        startActivity(smsIntent);
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "No SIM Found", Toast.LENGTH_LONG).show();
    }
}