android广播总结

1、sendBroadcast方法发送广播。

package com.example.android_broadcast_normal;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btn;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn=(Button)this.findViewById(R.id.button1);
		//发送广播
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent intent=new Intent(MainActivity.this,MyReceiver.class);
				sendBroadcast(intent);
				
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

/**
 *Version:
 *author:YangQuanqing
 *Data:
 */
package com.example.android_broadcast_normal;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Build;

/**
 * 广播的生命周期onReceive()从开始到结束
 * @author YangQuanqing yqq
 *
 */
@SuppressLint("NewApi")
public class MyReceiver extends BroadcastReceiver {

	//通知管理实例
	private NotificationManager notificationManager;
	//创建通知者实例
	private Notification.Builder builder;
	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		//获得NotificationManager实例
		notificationManager=(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
		//实例化创建通知者实例
		builder=new Notification.Builder(context);
		//设置通知
		builder.setContentTitle("短信通知");
		builder.setContentText("你好");
		builder.setSmallIcon(R.drawable.ic_launcher);
		//构建一个通知
		notificationManager.notify(10086,builder.build());
		
	}

}


2、发送顺序广播

package com.example.android_brocast_order;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	private Button btn1,btn2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn1=(Button)this.findViewById(R.id.button1);
		btn2=(Button)this.findViewById(R.id.button2);
		btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// 多个广播接收者发送广播
				Intent intent=new Intent();
				intent.putExtra("name", "李华");
				intent.setAction("com.yqq.mutilBrocast");
				sendBroadcast(intent);
				
			}
		});
		//发送有序广播
		btn2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//创建意图
				Intent intent=new Intent();
				intent.putExtra("name","android");
				intent.setAction("com.yqq.mutilBrocast");
				//发送有序广播
				sendOrderedBroadcast(intent, null);
				
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

/**
 *Version:
 *author:YangQuanqing
 *Data:
 */
package com.example.android_brocast_order;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 * @author YangQuanqing yqq
 *
 */
public class BroadCast1 extends BroadcastReceiver {

	
	@Override
	public void onReceive(Context context, Intent intent) {
	Log.i("BroadCast1<<<", intent.getStringExtra("name"));
	//abortBroadcast();//终止广播

	}

}


/**
 *Version:
 *author:YangQuanqing
 *Data:
 */
package com.example.android_brocast_order;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 * @author YangQuanqing yqq
 *
 */
public class CopyOfBroadCast2 extends BroadcastReceiver {

	
	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i("BroadCast2<<<", intent.getStringExtra("name"));
		abortBroadcast();//若终止发有序广播的时候,后面的广播收不到
	}

}

/**
 *Version:
 *author:YangQuanqing
 *Data:
 */
package com.example.android_brocast_order;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

/**
 * @author YangQuanqing yqq
 *
 */
public class CopyOfBroadCast3 extends BroadcastReceiver {

	
	@Override
	public void onReceive(Context context, Intent intent) {
		Log.i("BroadCast3<<<", intent.getStringExtra("name"));
	}

}

 <receiver 
            android:name="com.example.android_brocast_order.BroadCast1"
            >
            <!-- 设置优先权整数越大优先权越大 -->
            <intent-filter android:priority="10000">
                <action android:name="com.yqq.mutilBrocast"/>
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.example.android_brocast_order.CopyOfBroadCast2"
            >
              <intent-filter android:priority="100">
                <action android:name="com.yqq.mutilBrocast"/>
            </intent-filter>
        </receiver>
        <receiver 
            android:name="com.example.android_brocast_order.CopyOfBroadCast3"
            >
              <intent-filter android:priority="9">
                <action android:name="com.yqq.mutilBrocast"/>
            </intent-filter>
        </receiver>
    


在实际开发中广播的应用方式如下demo所示:

package com.example.yqqmobilesafe.service;

import java.util.List;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.IBinder;
import android.telephony.SmsMessage;
import android.util.Log;

import com.example.yqqmobilesafe.RubishSmsActivity;
import com.example.yqqmobilesafe.ContactProvider.ContactInfoProvider;
import com.example.yqqmobilesafe.db.dao.RubishSmsInfoDao;
import com.example.yqqmobilesafe.domain.ContactInfo;
import com.example.yqqmobilesafe.domain.RubishSmsInfo;
/**
 * 陌生短信拦截服务
 * @author yqq
 *
 */
public class StopStrangerPhoneNumberSmsService extends Service {
	private boolean D=true;
	private StopStrangerSmsReceiver mReceiver;//陌生人短信拦截广播接受者
	public StopStrangerPhoneNumberSmsService() {
		// TODO Auto-generated constructor stub
	}

	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public void onCreate() {
		if(D){
			Log.i("StopStrangerPhoneNumberSmsService"," onCreate()");
		}
		//注册广播
		mReceiver=new StopStrangerSmsReceiver();
		IntentFilter filter=new IntentFilter();
		filter.setPriority(Integer.MAX_VALUE);
		filter.addAction("android.provider.Telephony.SMS_RECEIVED");
		registerReceiver(mReceiver, filter);
		super.onCreate();
	}
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		if(D){
			Log.i("StopStrangerPhoneNumberSmsService","onStartCommand");
		}
		return super.onStartCommand(intent, flags, startId);
	}
	@Override
	public void onDestroy() {
		if(D){
			Log.i("StopStrangerPhoneNumberSmsService","onDestroy() ");
		}
		//取消广播接收者
		unregisterReceiver(mReceiver);
		mReceiver=null;
		super.onDestroy();
	}
	
	//陌生人短信拦截广播接受者
	class  StopStrangerSmsReceiver extends BroadcastReceiver{
		private String sender;//发送人号码
		private String body;//短信内容
		@Override
		public void onReceive(Context context, Intent intent) {
			Object[] objs = (Object[]) intent.getExtras().get("pdus");
			for(Object obj : objs ){
				SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) obj);
				//获得短信发送者的号码
				sender = smsMessage.getOriginatingAddress();
				 body = smsMessage.getMessageBody();
				 
				new AsyncTask<Void,Void,Void>(){
					List<ContactInfo> infos=null;
					@Override
					protected Void doInBackground(Void... params) {
						ContactInfoProvider contactInfoProvider=new ContactInfoProvider(getApplicationContext());
						infos=contactInfoProvider.getSystemContactInfos();
						return null;
					}

					@Override
					protected void onPostExecute(Void result) {
						if(infos==null){
							//Toast.makeText(getApplicationContext(),, duration)
							return;
						}
						for(ContactInfo info:infos){
							if(info.getPhoneNumber().equals(sender)){
								return;
							}
						}
							
								abortBroadcast();
								new AsyncTask<Void,Void,Void>(){

									@Override
									protected Void doInBackground(
											Void... params) {
										RubishSmsInfo sms=new RubishSmsInfo();
										sms.setPhoneNumber(sender);
										sms.setSmsContent(body);
										//把陌生人短信存储在数据库表里
										RubishSmsInfoDao rubishSmsInfoDao=new RubishSmsInfoDao(getApplicationContext());
										rubishSmsInfoDao.addSmsInfos(sms);
										
										return null;
									}

									
									
									@Override
									protected void onPostExecute(Void result) {
										// TODO Auto-generated method stub
										super.onPostExecute(result);
										NotificationManager nm=(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
										Intent intent=new Intent(StopStrangerPhoneNumberSmsService.this,RubishSmsActivity.class);
										PendingIntent pi=PendingIntent.getActivity(StopStrangerPhoneNumberSmsService.this, 0, intent, 0);
										//发一个拦截通知
										Notification notification=new Notification.Builder(getApplicationContext())
										.setAutoCancel(true)
										.setTicker("拦截到陌生短信")
										.setSmallIcon(com.example.yqqmobilesafe.R.drawable.notif_icon_sms)
										.setContentText("拦截到陌生短信")
										.setContentIntent(pi)
										.build();
										nm.notify(100,notification);
									}
									
									
									
								}.execute();
								super.onPostExecute(result);
							}
				
				
			
						
			
					
					
					
				}.execute();
		}
			
		}
		
	}

}



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。