安卓BroaCastReceiver学习 实现接受飞行模式变化,并在应用中显示

BroaCastReceiver 安卓实现接受飞行模式变化,并在应用中显示

入门级博客,希望分享出来对新玩家(学生做课程实验)有点帮助,也给自己留下记录

直接开始:

新建了了一个Acitivity,在页面布局的中间显示一个TextView,通过TextView来显示当前手机飞行模式的状态。
初始状态

xml代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_show_msg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="当前状态:飞行模式开启"
        android:textSize="18sp"
        android:layout_centerInParent="true" />
</RelativeLayout>

2.创建的内部类MyBroadReciver继承BroadReciver,重写了onReceive方法。在onReceive方法中对手机的飞行模式的改变进行监听。当飞行模式发生变化后通过toast和TextView的方式显示。

状态变化

状态变化

    public class MyBroadReceiver extends BroadcastReceiver {
        int airState = 0;
        private String TAG = "MyBroadReceiver";
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)){
                Bundle bundle = intent.getExtras();
                if (bundle != null) {
                    airState = bundle.getInt("state");
                    Log.e(TAG, "飞行模式状态 1为开启状态,0为关闭状态 airState==" + airState);
                    if (airState == 0) {
                        switch (flag) {
                            case 1: // 飞行模式关闭
                                Log.i(TAG, "关闭状态  airState=");
                                toast("飞行模式状态关闭");
                                tv_show_msg.setText("飞行模式状态关闭");
                                flag = 0;
                                break;
                            case 0: // 飞行模式开启
                                Toast.makeText(context, "飞行模式状态开启", Toast.LENGTH_SHORT).show();
                                Log.i(TAG, "开启状态 airState=" + airState);
                                tv_show_msg.setText("飞行模式状态开启");
                                flag = 1;
                                break;
                        }
                    }
                }
            }
        }

    }

最后在MainActivity中动态对广播接收器进行注册,并通过Intentfliter指定监听的广播。记得重新重写Ondestroy方法,取消注册广播接收器。

public class SevenActivity extends BaseActivity {
    private MyBroadReceiver myBroadReceiver;
    private TextView tv_show_msg;
    private int flag = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seven);
        tv_show_msg = findViewById(R.id.tv_show_msg);

        myBroadReceiver = new MyBroadReceiver();
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        registerReceiver(myBroadReceiver,intentFilter);
        ContentResolver cr = getContentResolver();
        //先判断当前手机飞行模式的状态 ,0为飞行处于关闭状态
        if(android.provider.Settings.System.getString(cr, Settings.System.AIRPLANE_MODE_ON).equals("0")){
            tv_show_msg.setText("飞行模式状态关闭");
            flag = 0;
        }else {
            tv_show_msg.setText("飞行模式状态开启");
            flag = 1;
        }

    }
    }

全部代码

package com.byht.hu.androidtest.seventest;

import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import com.byht.hu.androidtest.BaseActivity;
import com.byht.hu.androidtest.R;

public class SevenActivity extends BaseActivity {
    private MyBroadReceiver myBroadReceiver;
    private TextView tv_show_msg;
    private int flag = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seven);
        tv_show_msg = findViewById(R.id.tv_show_msg);

        myBroadReceiver = new MyBroadReceiver();
        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
        registerReceiver(myBroadReceiver,intentFilter);
        ContentResolver cr = getContentResolver();
        //先判断当前手机飞行模式的状态 ,0为关闭飞行
        if(android.provider.Settings.System.getString(cr, Settings.System.AIRPLANE_MODE_ON).equals("0")){
            tv_show_msg.setText("飞行模式状态关闭");
            flag = 0;
        }else {
            tv_show_msg.setText("飞行模式状态开启");
            flag = 1;
        }

    }

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

    public class MyBroadReceiver extends BroadcastReceiver {
        int airState = 0;
        private String TAG = "MyBroadReceiver";
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)){
                Bundle bundle = intent.getExtras();
                if (bundle != null) {
                    airState = bundle.getInt("state");
                    Log.e(TAG, "飞行模式状态 1为开启状态,0为关闭状态 airState==" + airState);
                    if (airState == 0) {
                        switch (flag) {
                            case 1: // 飞行模式关闭
                                Log.i(TAG, "关闭状态  airState=");
                                toast("飞行模式状态关闭");
                                tv_show_msg.setText("飞行模式状态关闭");
                                flag = 0;
                                break;
                            case 0: // 飞行模式开启
                                Toast.makeText(context, "飞行模式状态开启", Toast.LENGTH_SHORT).show();
                                Log.i(TAG, "开启状态 airState=" + airState);
                                tv_show_msg.setText("飞行模式状态开启");
                                flag = 1;
                                break;
                        }
                    }
                }
            }
        }

    }

}

BaseActivity可以不要,直接用Toast.makeText(this,msg, Toast.LENGTH_LONG).show();就好

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值