Android BroadcastReceiver廣播簡單使用
本文實(shí)例為大家分享了Android BroadcastReceiver廣播使用的具體代碼,供大家參考,具體內(nèi)容如下
靜態(tài)的BroadcastReceiver
主要代碼
public class MyReceiver extends BroadcastReceiver { @Override //接受廣播時(shí)回調(diào) public void onReceive(Context context, Intent intent) {//接收廣播 if(intent != null){ //接收到是什么廣播 String action = intent.getAction(); Log.e('測試',action); } }}
在AndroidManifest.xml里設(shè)置權(quán)限
<receiver android:name='.MyReceiver'> <!--接受廣播類型--> <intent-filter><!--開機(jī)廣播--><action android:name='android.intent.action.BOOT_COMPLETED'/><!--電量低廣播--><action android:name='android.intent.action.BATTERY_LOW'/><!--應(yīng)用卸載--><action android:name='android.intent.action.PACKAGE_REMOVED'/><!--應(yīng)用安裝--><action android:name='android.intent.action.PACKAGE_INSTALL'/><!--數(shù)據(jù)類型--><data android:scheme='package'/> </intent-filter></receiver>
動(dòng)態(tài)的BroadcastReceiver
主要代碼
1.設(shè)置一個(gè)Java類繼承BroadcastReceiver
public class MyReceiverD extends BroadcastReceiver { @Override //接受廣播時(shí)回調(diào)(不能做耗時(shí)操作,必須開子線程) public void onReceive(Context context, Intent intent) { //接收廣播 if(intent != null){//接收到是什么廣播String action = intent.getAction();Log.e('測試',action); }} }
在AndroidManifest.xml里設(shè)置權(quán)限
<!--動(dòng)態(tài)注冊--><receiver android:name='.MyReceiverD'>//因?yàn)槭莿?dòng)態(tài)設(shè)置就不需要在里面設(shè)置別的了</receiver>
3.MainActivity
//新建一個(gè)廣播接收器 動(dòng)態(tài)廣播receiverD = new MyReceiverD();//接收那種廣播IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);intentFilter.addDataScheme('package');intentFilter.addAction(Intent.ACTION_BATTERY_LOW);//注冊廣播接收器registerReceiver(receiverD,intentFilter);protected void onDestroy() {super.onDestroy();//取消注冊關(guān)閉接收器if (receiverD != null){ unregisterReceiver(receiverD);} }
隨便卸載一個(gè)應(yīng)用控制臺就會顯示
自定義的BroadcastReceiver
1.還是準(zhǔn)備一個(gè)Java繼承BroadcastReceiver
public class MyReceiverD_zdy extends BroadcastReceiver { private TextView txt; public MyReceiverD_zdy(TextView txt) {this.txt = txt; } public MyReceiverD_zdy() { } @Override public void onReceive(Context context, Intent intent) {//接收廣播if(intent != null){ //接收到是什么廣播 String action = intent.getAction(); Log.e('測試',action); //判斷是什么廣播,是否是自己自定義的廣播 if (TextUtils.equals(action,MainActivity.MY_ACTION)){//獲取廣播攜帶的數(shù)據(jù)String content = intent.getStringExtra(MainActivity.BROADCAST_CONTENT); if (txt != null){ txt.setText('接收到的action是:'+action+'n接收到的內(nèi)容是'+content); } }} }}
2.activity_main.xml
<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' tools:context='.MainActivity' android:orientation='vertical' android:padding='16dp' > <TextViewandroid:layout_width='match_parent'android:layout_height='wrap_content'android:text='請輸入發(fā)送內(nèi)容:'/> <EditTextandroid: android:layout_width='match_parent'android:layout_height='50dp'android:layout_marginTop='16dp'/> <Buttonandroid: android:layout_width='match_parent'android:layout_height='wrap_content'android:layout_marginTop='16dp'android:layout_gravity='center_horizontal'android:text='發(fā)送廣播'/> <TextViewandroid: android:layout_width='match_parent'android:layout_height='wrap_content'android:layout_marginTop='16dp'android:text='收到的內(nèi)容:'/></LinearLayout>
3.MainActivity
public class MainActivity extends AppCompatActivity { private MyReceiverD receiverD; private MyReceiverD_zdy receiverDZdy; private Button bnt; private EditText etxt; private TextView txt; public static final String MY_ACTION = 'com.example.my'; public static final String BROADCAST_CONTENT = 'cs'; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();//設(shè)置應(yīng)用主頁面的標(biāo)題setTitle(getPackageName()); //新建廣播接收器receiverDZdy = new MyReceiverD_zdy(txt);//注冊廣播接收器//為廣播添加ActionIntentFilter intentFilter = new IntentFilter();intentFilter.addAction('android.intent.action,PACKAGE_REMOVED');//自定義intentFilter.addAction(MY_ACTION);//注冊廣播接收器registerReceiver(receiverDZdy,intentFilter);bnt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) {//新建廣播 自定義Intent intent = new Intent(MY_ACTION);//攜帶數(shù)據(jù)intent.putExtra(BROADCAST_CONTENT,etxt.getText().toString());//發(fā)送廣播sendBroadcast(intent); }}); } protected void onDestroy() {super.onDestroy();//取消注冊關(guān)閉接收器if (receiverDZdy != null){ unregisterReceiver(receiverDZdy);} } private void initView() {//初始化etxt = (EditText) findViewById(R.id.etxt);txt =(TextView) findViewById(R.id.txt);bnt =(Button) findViewById(R.id.bnt); }}
樣式
當(dāng)然也可以實(shí)現(xiàn)不同app接受發(fā)送的廣播內(nèi)容復(fù)制代碼換app名字,當(dāng)前app發(fā)送的廣播新的app也可以接收到
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. Intellij IDEA 2019 最新亂碼問題及解決必殺技(必看篇)2. JS+css3實(shí)現(xiàn)幻燈片輪播圖3. JS繪圖Flot如何實(shí)現(xiàn)動(dòng)態(tài)可刷新曲線圖4. css3溢出隱藏的方法5. 未來的J2EE主流應(yīng)用框架:對比Spring和EJB36. Android自定義View實(shí)現(xiàn)掃描效果7. 關(guān)于HTML5的img標(biāo)簽8. ASP.NET MVC獲取多級類別組合下的產(chǎn)品9. Android Manifest中meta-data擴(kuò)展元素?cái)?shù)據(jù)的配置與獲取方式10. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效
