Android Broadcast要点
请描述一下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>