android中短信的发送与接收,在android中发送独特的短信和接收looong短信

因此,我试了很长时间才找到一种方法来制作可以在android中发送和接收短信的应用。这工作正常。下面是代码:在android中发送独特的短信和接收looong短信

对于发送:

@SuppressWarnings("deprecation")

public void sendSMS(String phoneNumber, String message) {

String SENT = "SMS_SENT";

String DELIVERED = "SMS_DELIVERED";

int unq = 0;

Intent sent = new Intent(SENT);

sent.putExtra("unq", unq);

Intent delivered = new Intent(DELIVERED);

delivered.putExtra("unq", unq);

PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, sent, 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,delivered, 0);

// ---when the SMS has been sent---

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context arg0, Intent arg1) {

switch (getResultCode()) {

case Activity.RESULT_OK:

Toast.makeText(getBaseContext(), "SMS sent",

Toast.LENGTH_SHORT).show();

smsstatus = "0";

smserror = "noError";

//sendSmsStatus();

break;

case SmsManager.RESULT_ERROR_GENERIC_FAILURE:

Toast.makeText(getBaseContext(), "Generic failure",

Toast.LENGTH_SHORT).show();

setSmsstatus("1");

setSmserror("Generic failure");

sendSmsStatus("Generic failure");

break;

case SmsManager.RESULT_ERROR_NO_SERVICE:

Toast.makeText(getBaseContext(), "No service",

Toast.LENGTH_SHORT).show();

setSmsstatus("2");

setSmserror("No service");

sendSmsStatus("No service");

break;

case SmsManager.RESULT_ERROR_NULL_PDU:

Toast.makeText(getBaseContext(), "Null PDU",

Toast.LENGTH_SHORT).show();

setSmsstatus("3");

setSmserror("Null PDU");

sendSmsStatus("Null PDU");

break;

case SmsManager.RESULT_ERROR_RADIO_OFF:

Toast.makeText(getBaseContext(), "Radio off",

Toast.LENGTH_SHORT).show();

setSmsstatus("4");

setSmserror("Radio off");

sendSmsStatus("Radio off");

break;

}

}

}, new IntentFilter(SENT));

// ---when the SMS has been delivered---

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context arg0, Intent arg1) {

switch (getResultCode()) {

case Activity.RESULT_OK:

Toast.makeText(getBaseContext(), "SMS delivered",

Toast.LENGTH_SHORT).show();

break;

case Activity.RESULT_CANCELED:

Toast.makeText(getBaseContext(), "SMS not delivered",

Toast.LENGTH_SHORT).show();

break;

}

}

}, new IntentFilter(DELIVERED));

SmsManager sms = SmsManager.getDefault();

sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

}

用于接收:

public class SmsReceiver extends BroadcastReceiver {

@SuppressWarnings("deprecation")

@Override

public void onReceive(Context context, Intent intent) {

// ---get the SMS message passed in---

Bundle bundle = intent.getExtras();

SmsMessage[] msgs = null;

String str = "";

Object sms = "";

ArrayList s = new ArrayList();

Manager m = Factory.getInstance().getManager();

if (bundle != null) {

// ---retrieve the SMS message received---

Object[] pdus = (Object[]) bundle.get("pdus");

msgs = new SmsMessage[pdus.length];

for (int i = 0; i < msgs.length; i++) {

msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

str += " SMS fra " + msgs[i].getOriginatingAddress() + "\n";

str += " Besked: ";

str += msgs[i].getMessageBody().toString();

str += "\n";

sms = "SMS = "+msgs[i].getOriginatingAddress()+","+msgs[i].getMessageBody().toString();

s.add(msgs[i].getOriginatingAddress());

s.add(msgs[i].getMessageBody().toString());

}

// ---display the new SMS message---

Toast.makeText(context, str, Toast.LENGTH_LONG).show();

Manager.toastIt(context, str);

// Send the sms to the server

//Connection.send(new Transmit("SmsReceived",s));

}

}

}

这个伟大的工程!

问题出在这里。它是更多钞票来refactore我的代码才达到以下几点:

对我发送短信的唯一indentifier /标记,这样我可以确保我收到一个状态,其短信。正如你所看到的,我已经试图在我的两个意图上加上额外的东西,也许这是正确的方式,但不仅我现在不是如何检查/接收/提取状态标志,而且标志真的是“独特的“现在。

很好,我可以尝试短信,但是当它超过160个字符时,它只显示我的前160个字符。我曾看过GTalkSMS如何做,但希望我的代码可以重构一下:)

最后一个问题是,上述2的混合。我不能发送超过160个字符的短信。我知道我必须使用sendMultipartTextMessage,但我不知道如何。我的想法是,我可以将“字符串消息”除以100来排列数组,但我不知道。

因此,请随意重新构造代码。我期待着看到你的回复! :D 请问你是否需要解释更好或更多代码的任何东西! :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值