版權聲明:本文為博主原創文章,大家可以一起學習,一起進步!
今天簡單的了解了一下廣播,在這里給大家簡單的分享下我的收獲! 據我簡單的了解,廣播分為靜態廣播與動態廣播,黏性廣播,在這里我給大家簡單的說下吧! 1,優先級動態廣播的優先級比靜態廣播高 2,動態廣播無需在AndroidManifest.xml中聲明即可直接使用,也即動態;而靜態廣播則需要,有時候還要在AndroidManifest.xml中加上一些權限的聲明 3,靜態廣播在應用程序退后也能收到廣播,動態廣播在應用程序退出之后是收不到廣播的。 4,粘性廣播呢現在是屬于過時的,但是還是可以用的,他可以解決動態廣播在應用程序退出后不能收到廣播的問題,啟動應用程序后就會收到之前發的廣播,但是粘性廣播是要在配置文件中添加權限的
<!--添加發送黏性廣播的權限--><uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>廢話不多說,下面來通過一個簡單的例子看下靜態廣播: 首先,對于靜態廣播,我們需要在AndroidManifest.xml聲明。
<receiver android:name=".MyReceived01"><intent-filter><action android:name="com.zking.g150831_android20_sender.520"></action> </intent-filter> </receiver>activity_main.xml(發送者布局文件中的代碼):
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.zking.g150831_android20_sender.MainActivity"> <EditText android:id="@+id/et_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入廣播的內容" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="send" android:text="發送" /></LinearLayout>MainActivity發送者里的代碼:
package com.zking.g150831_android20_sender;import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;public class MainActivity extends AppCompatActivity { PRivate EditText editText; private Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.et_content); intent = new Intent();//設置廣播的名字(設置action) intent.setAction("com.zking.g150831_android20_sender.520"); } public void send(View view) { String content = editText.toString(); //攜帶數據 intent.putExtra("data", content); //發送廣播 sendBroadcast(intent); //發送粘性廣播 // sendStickyBroadcast(intent); }}好了發送者寫完了我們接下來寫接受者 接收靜態廣播,首先要新建一個類繼承BroadcastReceiver,實現它里面的onReceive方法
package com.zking.g150831_android20_received01;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.util.Log;/** * Created by Administrator on 2017/2/7. */public class MyReceived01 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if ("com.zking.g150831_android20_sender.520".equals(intent.getAction())) { } String data = intent.getStringExtra("data"); Log.i("test", "01號接受者收到廣播了" + data); }}可以看到,靜態廣播不需要在代碼中注冊,下面我們看下動態廣播: 首先不需要在AndroidManifest.xml聲明,直接在代碼中注冊,不過最后必須要在onDestroy里面注銷
package com.zking.g150831_android20_received01;import android.content.IntentFilter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class MainActivity extends AppCompatActivity { private MyReceived01 myReceived01; private IntentFilter intentFilter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myReceived01 = new MyReceived01(); intentFilter = new IntentFilter(); intentFilter.addAction("com.zking.g150831_android20_sender.520"); } @Override protected void onResume() { super.onResume(); //動態注冊廣播 registerReceiver(myReceived01,intentFilter); } //銷毀 @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myReceived01); }}發送粘性廣播只要把sendBroadcast(intent)改成sendStickyBroadcast(intent)即可
public void send(View view) { String content = editText.toString(); //攜帶數據 intent.putExtra("data", content); //發送廣播 // sendBroadcast(intent); //發送粘性廣播 sendStickyBroadcast(intent); }好了,簡單的靜態廣播,動態廣播,粘性廣播就在上面了,下面我在給大家講下系統廣播,在這里我簡單用系統廣播之電話狀態給大家舉個例子
話不多說,我們直接上效果圖 效果圖
activity代碼: package com.zking.g150831_android20_phonestate; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.telephony.TelephonyManager; import android.util.Log; import android.widget.Toast;
/** * Created by Administrator on 2017/2/7. */
public class MyPhone extends BroadcastReceiver{
@Overridepublic void onReceive(Context context, Intent intent) { if("android.intent.action.PHONE_STATE".equals(intent.getAction())){ //獲取電話號碼 String number= intent.getStringExtra("incoming_number"); Log.i("test","呼叫來電,"+number);//獲取電話狀態電話管理者 TelephonyManager tm= (TelephonyManager) context.getSystemService(context.TELEPHONY_SERVICE); int state=tm.getCallState(); switch (state){ case TelephonyManager.CALL_STATE_RINGING: Log.i(“test”,”來電話了”); break; case TelephonyManager.CALL_STATE_OFFHOOK: Log.i(“test”,”通話中”); break; case TelephonyManager.CALL_STATE_IDLE: Log.i(“test”,”掛斷了”); break;
} }}}
這里一定要注意,別忘記在配置清單文件中加權限: 同時在清單文件中配置廣播接受者(即靜態廣播)
好了,全部代碼就在這了,就這么簡單!!很簡單的,其實沒有想象中那么復雜!
新聞熱點
疑難解答