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);
}
}
<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);
}
}
相关文章推荐
- Android上的文本/数据短信(发送/接受/拦截)
- Android监听发送短信和接受短信的事件
- android 发送短信和接受短信模块
- Android中短信的收发机制 发送短信 接收短信 拦截短信 监听短信
- Android 接受短信和发送短信
- Android - xml动画,识别手势动作,代码抽取,获取手机SIM卡串号,获取联系人数据,开机广播,发送/解析短信,报警音乐
- ME310之AT指令总结:发送[文本|PDU],[普通|飞信]短信,发送GPRS数据,读取短信分析
- 【慢慢学Android】:6.发送和接受短信
- android 发送短信的拦截问题探索
- android发送短信和拦截短信信息
- Android项目实现短信的发送、接收和对短信进行拦截
- Android从普通发送和接收短信到对短信进行拦截
- Android中短信发送与接受
- Android从普通发送和接收短信到对短信进行拦截
- Android 发送短信+接收短信+管理短信+拦截短信
- Android 接受短信和发送短信
- android发送UDP广播及在PC上接受广播数据
- Android开发之与服务器(jsp)发送、接受JSON数据
- android最简单的发送文本短信的demo
- android短信发送和接受