1. 程式人生 > >Android靜態,動態廣播示例

Android靜態,動態廣播示例

複製程式碼
/**
 * 顯示wifi訊號強度元件
 * 
 * @author 夏於衝
 * 
 */
public class SystemInfoView extends LinearLayout {
    private WifiUtil wifiUtil;
    private final String RSSI_CHANGED_ACTION = "android.net.wifi.RSSI_CHANGED";
    private final String WIRED_ON_ACTION = "android.settings.WIRELESS_SETTINGS_UP";
    private
final String WIRED_OFF_ACTION = "android.settings.WIRELESS_SETTINGS_DOWN"; private final String WIRED_REMOVE_ACTION = "android.settings.WIRELESS_SETTINGS_REMOVED"; private int[] wifiImages = new int[] { R.drawable.wifi_level1, R.drawable.wifi_level2, R.drawable.wifi_level3, R.drawable.wifi_level4, R.drawable.wifi_level5 };
private NetChangedBroadcastReceiver netChangedBroadcastReceiver; private ImageView wifiImageView, wiredImageView; private ImageView sdcardImageView, usbImageView; private EthernetSettings ethernetUtil; private EthernetInfo ehtherInfo; private Context context; private MediaMountedBroadcastReceiver mediaMountedBroadcastReceiver;
public SystemInfoView(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; LayoutInflater.from(getContext()).inflate(R.layout.system_info, this); wifiImageView = (ImageView) findViewById(R.id.imageView_wifi); wiredImageView = (ImageView) findViewById(R.id.imageView_wired); sdcardImageView = (ImageView) findViewById(R.id.imageView_sdcard); usbImageView = (ImageView) findViewById(R.id.imageView_usb); wifiUtil = new WifiUtil(context); setWifiLevel(); // 設定有線連線的初始狀態 if (isEthernetAvailable()) { setWired(true); } else { setWired(false); } // 判斷是否有儲存裝置,已經儲存裝置型別 if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { File sdcardPath = new File("mnt/sdcardEx/"); File usbPath = new File("mnt/usbdisk/usbdisk1"); if (sdcardPath.listFiles() != null) { setSdcard(true); } if (usbPath.listFiles() != null) { setUsb(true); } } // 註冊廣播接收器 registerBroadastReceiver(context); } /** * 獲取有線連線的狀態 */ public boolean isEthernetAvailable() { ethernetUtil = new EthernetSettings(); ehtherInfo = new EthernetInfo(); ehtherInfo = ethernetUtil.getEthernet(); if (ehtherInfo.ip.equals("0.0.0.0")) { return false; } else { return true; } } public void setWifiLevel() { WifiInfo info = wifiUtil.getConnectInfo(); if (info == null) { wifiImageView.setBackgroundResource(R.drawable.wifi_level0); return; } int signalStrength = info.getRssi(); // 計算訊號強度等級 int level = wifiUtil.calculateSignal(signalStrength, 5); switch (level) { case 0: wifiImageView.setBackgroundResource(wifiImages[0]); break; case 1: wifiImageView.setBackgroundResource(wifiImages[1]); break; case 2: wifiImageView.setBackgroundResource(wifiImages[2]); break; case 3: wifiImageView.setBackgroundResource(wifiImages[3]); break; case 4: wifiImageView.setBackgroundResource(wifiImages[4]); break; } } public void setWired(boolean state) { if (state) { wiredImageView.setImageResource(R.drawable.wired_on); } else { wiredImageView.setImageResource(R.drawable.wired_off); } } public void setSdcard(boolean state) { if (state) { sdcardImageView.setImageResource(R.drawable.sdcard_on); } else { sdcardImageView.setImageResource(R.drawable.sdcard_off); } } public void setUsb(boolean state) { if (state) { usbImageView.setImageResource(R.drawable.usb_on); } else { usbImageView.setImageResource(R.drawable.usb_off); } } /** * 註冊廣播接收器 */ private void registerBroadastReceiver(Context context) { IntentFilter filter = new IntentFilter(); filter.addAction(RSSI_CHANGED_ACTION); filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); filter.addAction(WIRED_ON_ACTION); filter.addAction(WIRED_REMOVE_ACTION); // 註冊有線,無線連線的廣播接收器 netChangedBroadcastReceiver = new NetChangedBroadcastReceiver(); context.registerReceiver(netChangedBroadcastReceiver, filter); IntentFilter mediaMountedBroadcastFilter = new IntentFilter(); mediaMountedBroadcastFilter.addDataScheme("file"); mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_MOUNTED); mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_REMOVED); mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED); mediaMountedBroadcastFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL); // 註冊sdcard,usb掛載的廣播接收器 mediaMountedBroadcastReceiver = new MediaMountedBroadcastReceiver(); context.registerReceiver(mediaMountedBroadcastReceiver, mediaMountedBroadcastFilter); } /** * 登出廣播接收器 */ public void unregisterReceiver(Context context) { context.unregisterReceiver(netChangedBroadcastReceiver); context.unregisterReceiver(mediaMountedBroadcastReceiver); } class MediaMountedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_MEDIA_MOUNTED)) { // sdcard, 或者usb接入 if (intent.getDataString().contains("sdcardEx")) { setSdcard(true); } else if (intent.getDataString().contains("usbdisk")) { setUsb(true); } } else if (intent.getAction().equals(Intent.ACTION_MEDIA_REMOVED) || intent.getAction().equals(Intent.ACTION_MEDIA_BAD_REMOVAL) || intent.getAction().equals(Intent.ACTION_MEDIA_UNMOUNTED)) { // sdcard,或者usb拔出 if (intent.getDataString().contains("sdcardEx")) { setSdcard(false); } else if (intent.getDataString().contains("usbdisk")) { setUsb(false); } } } } class NetChangedBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(RSSI_CHANGED_ACTION)) { //無線訊號改變 setWifiLevel(); } if (intent.getAction().equals(WIRED_ON_ACTION)) { // 有線連線上 setWired(true); } else if (intent.getAction().equals(WIRED_REMOVE_ACTION)) { // 有線斷開 setWired(false); } } } }
複製程式碼