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();就好