我正在编写一个应用程序,它会在某些情况下自动发送短信给某个号码,短信代码正常工作,短信也会发送..但发送的短信没有显示在任何 其他 安装了SMS客户端/应用程序......
String phoneNumber = "1234512345";
String message = "Test Message";
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phoneNumber, null, message, null, null);
我缺少什么? 我希望发送的短信(我的应用发送的)显示在已安装的其他短信应用中..
答案 0 :(得分:6)
是的,您已经以编程方式发送短信,但未通知短信内容提供商,因此除非您通知,否则不会收到您的消息。
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" />
答案 1 :(得分:-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中写一些代码来显示获取的消息。消息将在意图中。所以从中获取String。
这里广播接收器仅接收来自号码“123456789”的消息。来自此号码的邮件不会转到您移动设备的收件箱中。如果你想在收件箱中看到也删除方法abortBroadcast()。