pendingintent以及短消息发送报告 && 拨号拦截 && 信息推送

        PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于点击后跳转页面,但不是马上跳转。还有诸如短信息发送报告,都是在稍晚的时候返回处理结果。PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例。

         以下通过一个自定义发送短信实例来说明它的用法。

(1)短信服务需要权限

<uses-permission android:name="android.permission.SEND_SMS" />
       通过android.telephony.SmsManager类可以编程方式发送SMS消息,这个类不能直接实例化,而是调用它的getDefault()静态方法获得一个SmsManager对象,然后调用sendTextMessage来发送SMS。

void sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)。

destinationAddress:目标电话号码;scAddress:服务中心地址;text:短信文本;sentIntent:发送消息后调用的意图;deliveryIntent:消息投递后调用的意图。通过这种方式发送的SMS不会出现在系统消息应用中。

(2)一个页面中的按钮发送特定短信,然后以toast返回信息报告结果。

	String SENT = "SMS_SENT";   //broadcast message when send 
	String DELIVERED = "SMS_DELIVERED";   //broadcast message when deliverd
	PendingIntent sentPI, deliveredPI;
	BroadcastReceiver smsSentReceiver, smsDeliveredReceiver;   
给PendingIntent 赋待触发发送的广播值
		sentPI = PendingIntent.getBroadcast(this, 0,new Intent(SENT), 0);
		deliveredPI = PendingIntent.getBroadcast(this, 0,new Intent(DELIVERED), 0);
定义receiver

public void onResume(){
    	super.onResume();
    	smsSentReceiver = 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();
					break;
				case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
					Toast.makeText(getBaseContext(), "Generic failure",Toast.LENGTH_SHORT).show();
					break;
				case SmsManager.RESULT_ERROR_NO_SERVICE:
					Toast.makeText(getBaseContext(), "No service",Toast.LENGTH_SHORT).show();
					break;
				case SmsManager.RESULT_ERROR_NULL_PDU:
					Toast.makeText(getBaseContext(), "Null PDU",Toast.LENGTH_SHORT).show();
					break;
				case SmsManager.RESULT_ERROR_RADIO_OFF:
					Toast.makeText(getBaseContext(), "Radio off",Toast.LENGTH_SHORT).show();
					break;
				}
			}
		};

		//---create the BroadcastReceiver when the SMS is delivered---
		smsDeliveredReceiver = 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;
				}
			}
		}; 

		//---register the two BroadcastReceivers---
		registerReceiver(smsDeliveredReceiver, new IntentFilter(DELIVERED));      
		registerReceiver(smsSentReceiver, new IntentFilter(SENT));
}
在onPause()中注销receiver
		unregisterReceiver(smsSentReceiver);
		unregisterReceiver(smsDeliveredReceiver);
发送的函数:

    public void onClick(View v){
    	sendSMS("136xxxxxxxx","TEST HI");
    }

    private void sendSMS(String string, String string2) {
		// TODO Auto-generated method stub
		SmsManager sms = SmsManager.getDefault();
		sms.sendTextMessage(string, null, string2, sentPI, deliveredPI);  //发送SMS后一旦pending的结果发生后就发送约定的广播Message,receiver收到就以toast提示结果
    }

======================================================================================================

        拦截特定拨号的功能应用,只需要在一个receiver中接收intent (android.intent.action.NEW_OUTGOING_CALL),onReceive的处理入下:

public void onReceive(Context context, Intent intent) {  
        if("5556".equals(this.getResultData())) this.setResultData(null);   //如果电话是5556,则清空,不调用拨号器  
}  
======================================================================================================
      一片网文对推送总结的比较全面,参见 http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378971.html。还有一篇基于MQTT协议实现的推送功能,有工程实例,请参见 http://blog.csdn.net/johnny901114/article/details/8898727

参考原文:http://blog.csdn.net/zeng622peng/article/details/6180190

参考原文:http://www.eoeandroid.com/thread-181050-1-1.html

参考原文:http://blog.csdn.net/xiazdong/article/details/7771315

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值