Android 广播BroadcastReceiver静态/动态注册,获取系统电量广播【开机广播】,获取网络状态广播,Timer的使用简介

工作内容:

1.自定义广播的使用(静态注册和动态注册)

2.获取系统广播(电量的广播)

3.获取开机广播

4.获取系统网路状态广播(静态/动态注册)

5.Timer的使用

学习分享:

下面代码:先讲解自定义广播的静态注册,动态注册,之后才讲发送广播

实例1:自定义广播(静态注册)

AndroidManifest中添加下面代码(与activity同级

<receiver android:name=".activity.MyReceiver1"
    >
    <intent-filter>
        <!--设置过滤为321-->
        <action android:name="321"></action>
    </intent-filter>
</receiver>

这样就完成了一个MyReceiver的静态注册,在这个自定义类里面的onReceive()中就可以收到action321的广播

/**
 * Created by Administrator on 2016/8/15.
 * 自定义广播类
 */
public class MyReceiver extends BroadcastReceiver {
    /**
     * 收到广播后的处理
     * @param context
     * @param intent    根据intent携带的action处理相应的逻辑
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"收到"+intent.getAction(),Toast.LENGTH_SHORT).show();
    }
}

(动态注册)——是指在Java代码中写它的过滤,并调用registerReceiver()方法完成注册,【需在onDestroy()方法中调用unregisterReceiver()销毁其注册】

 

//生成一个自定义广播接收器对象
MyReceiver receiver = new MyReceiver();
//生成一个intent过滤器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
//动态注册广播
registerReceiver(receiver,intentFilter);
在onDestrory()方法中取消注册:
protected void onDestroy() {
    //取消注册
    unregisterReceiver(receiver);
    super.onDestroy();
}

获取系统广播——(系统电源广播)

1.IntentFilter intentFilter = new IntentFilter()

2.intentFilter.addAction(Intent.ACTION_BATTERY_CHANGE)

3.在registerReceiver(myBroadCastReceiver myReceiver,IntentFilter intentFilter)

获取开机广播——与service前台执行notification可以开始时运行在通知栏

1.设置权限

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

2.设置静态注册广播

<!--开机启动广播-->
         <receiver android:name=".MyBroatcast">
             <intent-filter>
                 <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </receiver>
3.接收开机启动广播 【运行于通知栏的service】

//接收开机启动的广播
public class MyBroatcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        //启动一条服务(运行于通知栏)
        Intent intent1 = new Intent(context,MyService.class);
        context.startService(intent1);
    }
}

4.只需在自定义广播myBroadCastReceiver中的onReceive方法里写入获取广播的参数

例1:获取当前的电量值按百分比:0-100

int batteryLevelNow = intent.getIntExtra(BatteryManager.EXTRA_LEVEL,0)

例2:获取当前的电池的状态:2—充电,3—用电

int batteryLevelNow = intent.getIntExtra(BatteryManager.EXTRA_STATUS,0)

例3:

获取网路状态的自定义广播

//接收网路状态的广播
public class MyBroatcast extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        LogD.d("网路状态改变"+intent.getAction());
        ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo  mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);//2G/3G/4G链接
        NetworkInfo  wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);//WIFI链接
        if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {

            LogD.d("没有网路");

        }else {

            LogD.d("网络正常");
        }
    }
}

xml中注册:

<receiver android:name=".MyBroatcast">
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
</receiver>

动态注册(记得在onDestory中使用unregisterReceiver())

public class SecoundActivity extends AppCompatActivity {
    TextView textView;
    MyBroatcast broatcast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_secound);
        textView = (TextView) findViewById(R.id.textView2);
        //动态注册接收网络状态广播
        broatcast = new MyBroatcast();
        IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(broatcast,filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(broatcast);
    }
}

Timer的使用

final Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        //逻辑处理代码块
    }
};
timer.schedule(timerTask,50,50);//执行timerTask,50毫秒之后执行,每隔50毫秒执行一次,重复执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值