美文网首页serviceAndroid开发Android知识
戏说Android四大组件之BroadcastReceiver

戏说Android四大组件之BroadcastReceiver

作者: 小奚有话说 | 来源:发表于2017-03-29 22:53 被阅读33次
    戏说江湖静如水,游荡江湖才有情。我就是江湖中的一个戏子。

    俗话说,入行先入门。作为一名android学习者,四大组件是android中的核心组件,岂有不学之理。然而,本人才疏学浅,叙述略有不当之处,敬请谅解。


    BroadcastReceiver在android开发中使用的频率也是蛮高的,主要的作用来接受系统广播或者用户广播,然后进行相应的处理,很像我们生活中的广播。

    • 类别

      • 普通广播

      对于多个接受者来说是完全异步的,每个接受者无需等待就可以接受到广播,并且接受者之间不会有任何影响。这种广播,接受者无法终止广播,也无法阻止其他接受者的接收动作。

      • 有序广播

      有序广播每次只能发送到优先级较高的接接收者哪里,然后由优先级高的接收者传播到优先级低的接收者那里,并且优先级高的接收者能够终止这个广播。

      需要定义权限,在必要时来终止权限

      <permission android:protectionLevel="normal"
               android:name="scott.permission.BROADCAST_PERMISSION"/>
      

      然后声明使用了该权限

      <uses-permission android:name="scott.permission.BROADCAST_PERMISSION"
      
    • 使用方法

      • 继承android.content.BroadcastReceiver
      • 实现其onReceiver方法
      • 静态注册
      <action android:name="andorid.intent.action.BROADCAST"/>
      
      • 动态注册
      IntentFilter filter = new IntentFilter();
      filter.addAction("android.intent.action.BROADCAST");
      

    相关案例使用

    • 开机启动服务
    1. 注册广播来接收开机启动广播,并启动自己的服务
    public class BootCompleteReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent bootIntent = new Intent(context,BootCompleteService.class);
            context.startService(bootIntent);
        }
    }
    
    1. 实现自己的服务
    public class BootCompleteService extends Service{
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    }
    
    1. 配置相关信息
     <receiver android:name=".BootCompleteReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </receiver>
    <service android:name=".BootCompleteService"/>
    
    1. 声明使用权限
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    
    • 网络状态变化
    1. 接收网络改变广播
    public class NetworkStateReciver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(isNetworkAvailable(context)){
                Toast.makeText(context,"network is disconnect",Toast.LENGTH_SHORT);
            }
        }
    
        public static boolean isNetworkAvailable(Context context){
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo[] info = cm.getAllNetworkInfo();
            if (info != null) {
                for (int i = 0;i < info.length;i++){
                    if(info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    }
                }
            }
            return false;
        }
    }
    
    1. 配置相关信息
    <receiver android:name=".NetworkStateReciver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </receiver>
    
    1. 声明使用权限
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    
    • 电量变化
    1. 接收电量信息
    public class BatteryChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            int currentLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
            int total = intent.getIntExtra(BatteryManager.EXTRA_SCALE,1);
            int precent = currentLevel * 100 / total;
            //TODO:you want to do
        }
    }
    
    1. 配置相关信息
    <receiver android:name=".BatteryChangeReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BATTERY_CHANGED"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </receiver>
    
    1. 声明使用权限
    <uses-permission android:name="android.permission.BATTERY_STATS"/>
    
    1. 立即获得电量信息
    Intent batteryIntent = getApplicationContext().registerReceiver(null,new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    int currentLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL,0);
    int totalLevel = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE,1);
    int precent = currentLevel * 100 / totalLevel;
    

    上述很简单的描述了BroadcastReceiver的使用方法和相关的案例,你是否又get到了呢?

    相关文章

      网友评论

        本文标题:戏说Android四大组件之BroadcastReceiver

        本文链接:https://www.haomeiwen.com/subject/oslavttx.html