广播是Android的四大组件之一,类似于监听不过是全局的。
我这是模仿Android系统广播的做法做一个无序的广播
所谓广播就是由接受者和发送至者组成
为了区分动态广播与静态广播我这里会分别建立以便区分
我这里先做一个发送者
布局样式:
android:layout_height="wrap_content"
android:hint="请输入广播内容"
android:id="@+id/et_main_content"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="发送"
android:onClick="send"
/>
JAVA代码:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText et_main_content;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_main_content = (EditText) findViewById(R.id.et_main_content);
intent = new Intent();
//设置广播的名字(设置Action)
intent.setAction("广播名且具有唯一性");
}
//按钮的 onClick事件
public void send(View view){
String content=et_main_content.getText().toString();
//携带数据
intent.putExtra("data",content);
//发送广播(无序广播)
sendBroadcast(intent);
}
静态接受者:
新建一个项目,在minActivity同级目录新建一个类继承BroadcastReceiver
我这里就打印一下了(值已经拿到)
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* @author Zking-Snail
* @time 2017/2/7 9:54
* @Version ${REV}
*/
public class MyReceived01 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if("广播名".equals(intent.getAction())){
String data=intent.getStringExtra("data");
Log.i("test","静态接受者收到广播了:"+data);
}
}
}
还有就是静态广播的话接受者要在清单文件里添加这个
<EditText
android:layout_width="match_parent"
<!--配置广播接受者:
.在清单文件中配置(静态广播)
-->
<receiver android:name=".类名">
<intent-filter>
<action android:name="广播名"></action>
</intent-filter>
</receiver>
动态接受者:
与静态的相识新建一个项目,在minActivity同级目录新建一个类继承BroadcastReceiver
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
/**
* @author Zking-Snail
* @time 2017/2/7 9:54
* @Version ${REV}
*/
public class MyReceived01 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if("广播名".equals(intent.getAction())){
String data=intent.getStringExtra("data");
Log.i("test","动态接受者收到广播了:"+data);
}
}
}
不同的就是在动态广播的MainActivity里要加点东西
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
private MyReceived02 myReceived02;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceived02 = new MyReceived02();
intentFilter = new IntentFilter();
intentFilter.addAction("com.zking.g150831_android20_sender.955");
}
@Override
protected void onResume() {
super.onResume();
//动态注册广播
registerReceiver(myReceived02,intentFilter);
}
@Override
protected void onDestroy() {
super.onDestroy();
//注销动态广播(一定要注销不然报错)
unregisterReceiver(myReceived02);
}
}
不喜勿喷,谢谢