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