一、自定义发送广播
1.定义一个按钮布局文件,当按下按钮时发送广播
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发出广播" android:onClick="click"/>2.Activity中的逻辑代码
//1.使用Intent对象发送,实例化对象 Intent intent = new Intent(); //发送广播的标识--在接受时的标识:接收需要在文件清单中配置 intent.setAction("aa"); //广播的内容;参数1:内容的名字,参数2:发送的内容 intent.putExtra("data","abcdefg"); //2.调用方法,发送广播-->setBroadcast() this.sendBroadcast(intent); //发送成功时的土司 Toast.makeText(this,"广播发送成功",Toast.LENGTH_SHORT).show();二、自定义接收广播
1.显式接收----在文件清单中注册自定义的广播
新建一个接收广播后的执行类————MyReceiver继承BroadcastReceiver广播接收的类
public class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { //接收到广播后执行的操作 Toast.makeText(context,"我接收到了广播",Toast.LENGTH_SHORT).show();
//获得接收广播的内容 String data = intent.getStringExtra("data"); Toast.makeText(context,data,Toast.LENGTH_SHORT).show(); } }
打开文件清单配置如下:
<!--注册接收广播的类--> <receiver android:name=".MyReceiver"> <intent-filter> <action android:name="aa"></action> </intent-filter> </receiver>action属性的name为自定义广播的setAction参数。
模拟方法:在模拟器上打开接收广播的app,按home键使应用到后台,切记不可按下返回键,按下返回键表示此应用被关闭了。然后打开发送广播的app,会土司出“我接受到了广播”
2.隐身接收------在Activity中的逻辑代码注册接收
首先还是定义接收广播后的一个执行操作类----MyYinShiRec
public class MyYinShiRec extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"我接收到了",Toast.LENGTH_SHORT).show(); } }然后在mainActivity中注册MyYinShiRec,代码如下:
myYinShiRec = new MyYinShiRec(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("aa"); this.registerReceiver(myYinShiRec,intentFilter);
最后别忘了,当退出接收时,要将广播取消掉---重写onDestroy()方法即可。
@Override protected void onDestroy() { super.onDestroy(); //当按下手机返回键时,取消掉广播 this.unregisterReceiver(myYinShiRec); }三、定义接收安卓系统发送的接收广播类
1.定义接收广播类后的执行类
public class LockScreenBroadcast extends BroadcastReceiver{ private static final String TAG = "liususu"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action == Intent.ACTION_SCREEN_OFF) { Log.e(TAG,"屏锁命令执行了"); }else if(action == Intent.ACTION_SCREEN_ON) { Log.e(TAG,"解锁命令执行了"); } } }2.在MainActivity中注册LockScreenBroadcast这个类
public class MainActivity extends AppCompatActivity { private LockScreenBroadcast screenBroadcast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); screenBroadcast = new LockScreenBroadcast(); IntentFilter filter = new IntentFilter(); //设置系统的广播标识,保证接收的是锁屏指令 filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); registerReceiver(screenBroadcast,filter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(screenBroadcast); } }