android四大组件-----广播
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 静态注册
2 动态注册
IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED")
registerReceiver(mBatteryInfoReceiver.intentFilter)
取消注册
unregisterReceier(receiver)
四
广播生命周期只有10秒
注册广播
发送广播
btn = findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setAction("com.yifei.myapplication.MyBroad");sendBroadcast(intent);}});
接收广播 在 主线程里做 只有10 秒 小心 ..... 可以在里面在开一个子线程
//创建广播接收者
public class MyBroad extends BroadcastReceiver {@Overridepublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn1 = findViewById(R.id.btn1);btn1.setOnClickListener(new View.OnClickListener() {@Overridepublic 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);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(myService);}
}
广播
public class MyService extends BroadcastReceiver {public static final String receiver ="com.yifei.myapplication.MyService";@Overridepublic 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";;@Overrideprotected 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);}@Overrideprotected void onDestroy() {super.onDestroy();unregisterReceiver(imoocBroadcast);}//点击按钮 发送广播@Overridepublic 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;}@Overridepublic 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);}}}}
}
跨应用的广播
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
