https://developer.android.com/guide/components/broadcasts
System broadcast
application broadcast
1.常见的系统广播
https://www.cnblogs.com/SamLXW/p/6409217.html
系统广播的监听
android 四大组件 acitivity service contentProvider brocoast
//注册广播 动态注册的广播比较好 省电
2 发起者
3接收者
一 广播接收者
Broadcast Receiver
二 广播类型
1 普通广播 通过 Context.sendBroadcast (intent)
2有序广播 通过 Context.sendOrderedBroadcase(intent,receiverPermission)
2.1截断广播 abortBroadcast
3 异步广播 context.sendStickyBroadcast(intent)
sendStickyOrderedBroadcase
三 监听广播
1 写一个类继承 Broadcast Receiver
2 重写 onReceive
3 SMSBroadReceivrer 注册广播接收者
1 静态注册
<receiver>
</receiver>
2 动态注册
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED")
registerReceiver(mBatteryInfoReceiver.intentFilter)
取消注册
unregisterReceier(receiver)
四
广播生命周期只有10秒
注册广播
<receiver android:name=".MyBroad">
<intent-filter>
<action android:name="com.yifei.myapplication.MyBroad"
/>
</intent-filter>
</receiver>
发送广播
btn = findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("com.yifei.myapplication.MyBroad");
sendBroadcast(intent);
}
});
接收广播 在 主线程里做 只有10 秒 小心 ..... 可以在里面在开一个子线程
//创建广播接收者
public class MyBroad extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(MainActivity.TAG, "onReceive: ");
}
}
动态注册 以及销毁广播
package com.yifei.myapplication;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
public static String TAG ="MainActivity12";
private Button btn,btn1;
private MyService myService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1 = findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//发送广播
Intent intent =new Intent(MyService.receiver);
sendBroadcast(intent);
}
});
//动态注册广播 接收者
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(MyService.receiver);
myService = new MyService();
registerReceiver(myService, intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(myService);
}
}
广播
public class MyService extends BroadcastReceiver {
public static final String receiver ="com.yifei.myapplication.MyService";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(MainActivity.TAG, "onReceive: MyService");
}
}
一个简单的自定义广播 可以跨activity 使用
Mainactivity
package com.yifei.myapplication;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity implements View.OnClickListener{
private EditText input;
private Button btn;
private TextView text;
private ImoocBroadcast imoocBroadcast;
private static final String TAG = "SecondActivity";
public static String ACTION_CUSTOM= "com.yifei.cmbs";;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
initView();
initBroad();
btn.setOnClickListener(this);
}
private void initBroad() {
// 新建广播接收器
imoocBroadcast = new ImoocBroadcast(text);
//注册广播接收器
IntentFilter intentFilter = new IntentFilter();
// intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
// intentFilter.addDataScheme("package");
intentFilter.addAction(ACTION_CUSTOM);
registerReceiver(imoocBroadcast,intentFilter);
}
private void initView() {
input = findViewById(R.id.input);
btn = findViewById(R.id.btn);
text = findViewById(R.id.textReciver);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(imoocBroadcast);
}
//点击按钮 发送广播
@Override
public void onClick(View view) {
Intent intent = new Intent(ACTION_CUSTOM);
intent.putExtra("broadcastIntent",input.getText().toString());
sendBroadcast(intent);
}
}
Broadcast
把接收到的消息传回到 activity
package com.yifei.myapplication;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;
public class ImoocBroadcast extends BroadcastReceiver {
private static final String TAG = "ImoocBroadcast";
private TextView textView;
public ImoocBroadcast() {
}
public ImoocBroadcast(TextView textView) {
this.textView = textView;
}
@Override
public void onReceive(Context context, Intent intent) {
//接收广播
if (intent != null) {
//接收到的是什么广播
String action = intent.getAction();
//判断是不是我们自己发送的自定义广播
if (TextUtils.equals(action, SecondActivity.ACTION_CUSTOM)) {
String data = intent.getStringExtra("broadcastIntent");
Log.d(TAG, "onReceive: " + data);
if(textView!=null){
textView.setText(data);
}
}
}
}
}
跨应用的广播