Android入门之广播

来源:互联网 发布:知乎 农村金融数据 编辑:程序博客网 时间:2024/05/30 23:04

广播是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);    }}




我这里就只是模仿安卓系统广播的做法而已,可能不够全面


不喜勿喷,谢谢




1 0