广播是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); }}我这里就只是模仿安卓系统广播的做法而已,可能不够全面不喜勿喷,谢谢
新闻热点
疑难解答