廣播:四大組件之一舰攒,你的應(yīng)用可以使用它對(duì)外部事件進(jìn)行過(guò)濾只對(duì)感興趣的外部事件(如當(dāng)電話呼入時(shí)烦衣,或者數(shù)據(jù)網(wǎng)絡(luò)可用時(shí))進(jìn)行接收并作出響應(yīng)纵寝,廣播接收器沒(méi)有用戶界面。然而赖临,它們可以啟動(dòng)一個(gè)activity或serice來(lái)響應(yīng)它們接收到的消息胞锰,或者用NotificationManager來(lái)通知用戶。通知可以用很多種方式來(lái)吸引用戶的注意力——閃動(dòng)背燈兢榨、震動(dòng)嗅榕、播放聲音等。一般來(lái)說(shuō)是在狀態(tài)欄上放一個(gè)持久的圖標(biāo)吵聪,用戶可以打開(kāi)它并獲取消息凌那。
- 想要攔截的廣播
- 攔截到廣播之后做得動(dòng)作
- 注冊(cè)廣播
- 取消注冊(cè)
package com.example.bbw.broadcastdemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private NetworkChangeReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//決定攔截哪條廣播
receiver = new NetworkChangeReceiver();
registerReceiver(receiver,intentFilter);//注冊(cè)
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);//取消注冊(cè)
}
private class NetworkChangeReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()){
Toast.makeText(getApplicationContext(),"network is available",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"network is unavailable",Toast.LENGTH_SHORT).show();
}
}
}
}
取得權(quán)限:
<uses-permission android:name="android.permission.ACCE SS_NETWORK_STATE"/>