android中可以通过设置写一个继承自BroadcastReceiver的Receiver来重写接收到短信之后的逻辑处理:
<receiver android:name=".filter.SmsReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
发送短信后的Broadcast:
1 ContentObserver
先写一个观察者:
代码
public class SmsObserver extends ContentObserver {
private Context context;
private static final String[] SMS_PROJECTION = new String[] {
"address","person","date","type","body",
};
super(handler);
this.context = context;
Log.i("Leo-SmsObserver", "My Oberver on create");
}
public void onChange (boolean selfChange) {
Log.i("SmsObserver", "sms onChange###### ");
}
private Context context;
private static final String[] SMS_PROJECTION = new String[] {
"address","person","date","type","body",
};
public SmsObserver(Context context,Handler handler) {
super(handler);
this.context = context;
Log.i("Leo-SmsObserver", "My Oberver on create");
}
public void onChange (boolean selfChange) {
Log.i("SmsObserver", "sms onChange###### ");
}
}
然后在Acitivty或Service里注册这个观察者
getContentResolver().registerContentObserver(Uri.parse("content://sms"),
true, new SmsObserver(this, new Handler()));
true, new SmsObserver(this, new Handler()));
2 可以自定义BroadcastReceiver来实现~
代码
SmsManager smsManager = SmsManager.getDefault();
// TODO Auto-generated method stub
try
{
/* 创建自定义Action常数的Intent(给PendingIntent参数之用) */
Intent itSend = new Intent(SMS_SEND_ACTIOIN);
Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
/* sentIntent参数为传送后接受的广播信息PendingIntent */
PendingIntent mSendPI = PendingIntent.getBroadcast
(getApplicationContext(), 0, itSend, 0);
/* deliveryIntent参数为送达后接受的广播信息PendingIntent */
PendingIntent mDeliverPI = PendingIntent.getBroadcast
(getApplicationContext(), 0, itDeliver, 0);
/* 发送SMS短信,注意倒数的两个PendingIntent参数 */
smsManager.sendTextMessage
(strDestAddress, null, strMessage, mSendPI, mDeliverPI);
mTextView01.setText(R.string.str_sms_sending);
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
// TODO Auto-generated method stub
try
{
/* 创建自定义Action常数的Intent(给PendingIntent参数之用) */
Intent itSend = new Intent(SMS_SEND_ACTIOIN);
Intent itDeliver = new Intent(SMS_DELIVERED_ACTION);
/* sentIntent参数为传送后接受的广播信息PendingIntent */
PendingIntent mSendPI = PendingIntent.getBroadcast
(getApplicationContext(), 0, itSend, 0);
/* deliveryIntent参数为送达后接受的广播信息PendingIntent */
PendingIntent mDeliverPI = PendingIntent.getBroadcast
(getApplicationContext(), 0, itDeliver, 0);
/* 发送SMS短信,注意倒数的两个PendingIntent参数 */
smsManager.sendTextMessage
(strDestAddress, null, strMessage, mSendPI, mDeliverPI);
mTextView01.setText(R.string.str_sms_sending);
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.printStackTrace();
}
代码
/* 自定义mServiceReceiver覆盖BroadcastReceiver聆听短信状态信息 */
public class mServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
try
{
/* android.content.BroadcastReceiver.getResultCode()方法 */
switch(getResultCode())
{
case Activity.RESULT_OK:
/* 发送短信成功,这里写需要的代码*/
//mTextView01.setText(R.string.str_sms_sent_success);
mMakeTextToast
(
getResources().getText
(R.string.str_sms_sent_success).toString(),
true
);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
/* 发送短信失败 */
//mTextView01.setText(R.string.str_sms_sent_failed);
mMakeTextToast
(
getResources().getText
(R.string.str_sms_sent_failed).toString(),
true
);
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
break;
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.getStackTrace();
}
}
}
public class mServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
try
{
/* android.content.BroadcastReceiver.getResultCode()方法 */
switch(getResultCode())
{
case Activity.RESULT_OK:
/* 发送短信成功,这里写需要的代码*/
//mTextView01.setText(R.string.str_sms_sent_success);
mMakeTextToast
(
getResources().getText
(R.string.str_sms_sent_success).toString(),
true
);
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
/* 发送短信失败 */
//mTextView01.setText(R.string.str_sms_sent_failed);
mMakeTextToast
(
getResources().getText
(R.string.str_sms_sent_failed).toString(),
true
);
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
break;
}
}
catch(Exception e)
{
mTextView01.setText(e.toString());
e.getStackTrace();
}
}
}