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);}}}}
}

跨应用的广播

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部