您的位置:首页 > 移动开发 > Android开发

Android上的文本/数据短信(发送/接受/拦截)

2013-06-28 15:41 453 查看
1) 发送文本短信:极简单:

<uses-permissionandroid:name="android.permission.SEND_SMS" /

SmsManager smsMgr = SmsManager.getDefault();

Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");

PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);

Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");

PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);

try {

smsMgr.sendTextMessage(telNumStr, null, SmsTextStr,dummySentEvent,dummyDeliveryEvent);

} catch (Exception e) {

Log.e("SmsSending", "SendException", e);

}

2) 发送数据短信:

<uses-permissionandroid:name="android.permission.SEND_SMS" /

SmsManager smsMgr = SmsManager.getDefault();

Intent sentIntent = newIntent("com.myself.action.SMS_SEND_RESULT");

PendingIntent dummySentEvent =PendingIntent.getBroadcast(MyActivity.this, 0, sentIntent,0);

Intent deliveryIntent = newIntent("com.myself.action.SMS_DELIVERY_RESULT");

PendingIntent dummyDeliveryEvent =PendingIntent.getBroadcast(MyActivity.this, 0, deliveryIntent,0);

int port=51234;

byte[] sms_data = myString.getBytes();

try {

smsMgr.sendDataMessage(telNumStr, null, port,sms_data,dummySentEvent, dummyDeliveryEvent);

} catch (Exception e) {

Log.e("SmsSending", "SendException", e);

}

3) 接收文本短信:需要通过BroadcastReceiver接收:

<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>

<receiver android:name="MessageDemo">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>

</receiver>

public classMessageDemo extendsBroadcastReceiver {

private static final String strACT=
"android.provider.Telephony.SMS_RECEIVED";

@Override

public void onReceive(Contextcontext, Intent intent) {

if(intent.getAction().equals(strACT)) {

StringBuilder sb = newStringBuilder();

Bundle bundle = intent.getExtras();

if (bundle !=null) {

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

SmsMessage[] msg =
newSmsMessage[pdus.length];

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

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

}

for (SmsMessage currMsg: msg) {

sb.append("From:");

sb.append(currMsg.getDisplayOriginatingAddress());

sb.append("\nMessage:");

sb.append(currMsg.getDisplayMessageBody());

}

} // end of !bundle

} // end of action match

Toast.makeText(context, sb.toString(),Toast.LENGTH_LONG).show();

//最后必须将控制权交还给上一个Activity,不然程序会出错:

Intent intent =
new Intent(context,MyLastActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(i);

}

4) 接收数据短信:需要通过BroadcastReceiver接收:

<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>

<receiver android:name="MessageDemo">

<intent-filter>

<action android:name="android.intent.action.DATA_SMS_RECEIVED"/>

<data android:scheme="sms" />

<data android:host="localhost"/>

<data android:port="51234"/>

</intent-filter>

</receiver>

Receiver与文本短信类似,只是把getDisplayMessageBody()改成getUserData().

5)短信拦截:根据Android的特点,无法做到在短信放入短信数据库前拦截掉,目前只能监视短信数据库发生变化时进行过滤,此时可能已经给用户发出提醒了。

public class ScreenTest extends Activity {

class SmsContent extends ContentObserver{

private Cursor cursor = null;

public SmsContent(Handler handler) {

super(handler);

}

@Overridepublic void onChange(boolean selfChange) {

super.onChange(selfChange);

//读取收件箱中指定号码的短信

cursor = managedQuery(Uri.parse("content://sms/inbox"),

new String[]{"_id", "address", "read"},

" address=? and read=?",

new String[]{"12345678901", "0"},

"date desc");

if (cursor != null){

ContentValues values = new ContentValues();

values.put("read", "1"); //修改短信为已读模式

cursor.moveToFirst();

while (cursor.isLast()) {

//更新当前未读短信状态为已读

getContentResolver().update(

Uri.parse("content://sms/inbox"),

values,

" _id=?", new String[]{""+cursor.getInt(0)}

);

cursor.moveToNext();

}

}

}

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

SmsContent content = new SmsContent(new Handler());

//注册短信变化监听

this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: