3

我正在编写一个应用程序,它会在某些情况下自动向给定号码发送短信,短信代码正在工作并且短信也已发送..但是发送的短信没有显示在任何其他安装的短信客户端/应用程序中。 .

String phoneNumber = "1234512345";
String message = "Test Message";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);

我错过了什么?我希望发送的短信(由我的应用程序发送)显示在已安装的其他短信应用程序中。

4

2 回答 2

6

是的,您已经以编程方式发送了 SMS,但您尚未通知 SMS 内容提供商,因此除非您通知它,否则它不会收到您的消息。

 ContentValues values = new ContentValues(); 
 values.put("address", "1234512345"); 
 values.put("body", "Test Message"); 
 getContentResolver().insert(Uri.parse("content://sms/sent"), values);

确保在 AndroidManifest.xml 文件中包含以下权限:

<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
于 2013-04-03T10:46:44.630 回答
-2

在接收端应用程序中使用广播接收器

 @Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub

     Bundle bundle = intent.getExtras();
     String str="";
     String from="";


        if (bundle != null) {
            Object[] pdus = (Object[])bundle.get("pdus");
            final SmsMessage[] messages = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++) {
                messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);                    
               str += messages[i].getMessageBody().toString();
               from = messages[i].getOriginatingAddress().toString();
            }

           if(from.equals("123456789")){ 

           str= str.trim();

           abortBroadcast();
           Intent intt = new Intent(context,MainActivity.class);
                   intt.putExtras("message",str); 
           intt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           context.startActivity(intt);
           }
       }

在您的 mainActivity 中编写一些代码来显示获得的消息。消息将在意图中。所以从中获取字符串。

这里广播接收器仅接收来自号码“123456789”的消息。来自这个号码的消息不会进入您手机的收件箱。如果您想在收件箱中查看,请删除方法 abortBroadcast()。

于 2013-04-03T11:24:01.037 回答