Android Broadcast要点

作者:陆金龙    发表时间:2018-03-28 23:18   


请描述一下Broadcast Receiver

有很多广播接收者 ,系统已经实现了.

广播分两种 有序广播和无序广播

指定接收者的广播,是不可以被拦截掉的  

 

有序广播 priority属性控制优先级,值越大,优先级越高。

先收到广播的接收者,可以终止广播的后续传播。 abortBroadcast();

 

用于接收系统的广播通知, sd卡挂载,手机重启,广播通知,低电量,来电,来短信等

来获取短信到来的广播, 根据黑名单来判断是否拦截该短信.

画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片

退出APP时发广播关闭所有的Activity

 

发送广播

Intent intent = new Intent(

Intent.ACTION_MEDIA_MOUNTED,

Uri.parse("file://"+Environment.getExternalStorageDirectory())

);

sendBroadcast(intent);

动态注册广播接收者

public class TestActivity extends AppCompatActivity {

  private TestBroadCastReceiver mReceiver;

 

@Override

  protected void onCreate(Bundle savedInstanceState)

  {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_test);

IntentFilter filter = new IntentFilter();

filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);

mReceiver = new TestBroadCastReceiver();

registerReceiver(mReceiver , filter);

}

 

@Override

protected void onDestroy()

{

super.onDestroy();

unregisterReceiver(mReceiver);

}

 

public class TestBroadCastReceiver extends BroadcastReceiver{

@Override

public void onReceive(Context context, Intent intent) {

  Toast.makeText(TestActivity.this,"网络发生了变化",Toast.LENGTH_SHORT)

.show();

}

}

 }

静态注册广播接收者manifest和代码中注册和使用

设置广播接收者的优先级,设置广播接受者的action名字等

 <receiver android:name=".SmsReceiver">

     <intent-filter android:priority="1000">

        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

     </intent-filter>

 </receiver>