1.简单的广播
静态注册AndroidManifest.xml
MainActivity<receiver android:name=".MyReceiver1" android:enabled="true" android:exported="true"> </receiver>
MyReceiver1import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements View.OnClickListener{ private EditText ed; private Button sendbtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed= (EditText) this.findViewById(R.id.ed); sendbtn= (Button) this.findViewById(R.id.btnsend); sendbtn.setOnClickListener(this); } @Override public void onClick(View v) { String msg=ed.getText().toString(); Intent it=new Intent(MainActivity.this,MyReceiver1.class); it.putExtra("msg",msg); this.sendBroadcast(it); } }
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String msg=intent.getStringExtra("msg"); Toast.makeText(context,msg,Toast.LENGTH_LONG).show(); } }
2.动态注释和注销
AndroidManifest.xml删除静态注册的代码
MainActivity
MyReceiver1import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements View.OnClickListener{ private EditText ed; private Button sendbtn,zc,zx; private MyReceiver1 receiver1=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed= (EditText) this.findViewById(R.id.ed); sendbtn= (Button) this.findViewById(R.id.btnsend); sendbtn.setOnClickListener(this); zc= (Button) this.findViewById(R.id.btnzc); zc.setOnClickListener(this); zx= (Button) this.findViewById(R.id.btnzx); zx.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btnsend: String msg=ed.getText().toString(); Intent it=new Intent(MyReceiver1.ACTION); it.putExtra("msg", msg); this.sendBroadcast(it); break; case R.id.btnzc: if(receiver1==null){ receiver1=new MyReceiver1(); IntentFilter filter=new IntentFilter(MyReceiver1.ACTION); //注册 registerReceiver(receiver1,filter); } break; case R.id.btnzx: if(receiver1!=null){ //注销之后,重新赋值为空 unregisterReceiver(receiver1); receiver1=null; } break; } } }
public class MyReceiver1 extends BroadcastReceiver { //intent中已经说明了,这是约定俗成的。 public static final String ACTION="com.rj141.sb.broadcastreceiverdemo.intent.action.MyReceiver1"; @Override public void onReceive(Context context, Intent intent) { String msg=intent.getStringExtra("msg"); Toast.makeText(context,msg,Toast.LENGTH_LONG).show(); } }
3.发送和接收有序消息
AndroidManifest.xml
MainActivity<receiver android:name=".MyReceiver1" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000"> <action android:name="com.rj141.sb.broadcastreceiverdemo.hello"></action> </intent-filter> </receiver> <receiver android:name=".MyReceiver2" android:enabled="true" android:exported="true"> <intent-filter android:priority="1000"> <action android:name="com.rj141.sb.broadcastreceiverdemo.hello"></action> </intent-filter> </receiver>
注意import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity implements View.OnClickListener{ private EditText ed; private Button sendbtn; private MyReceiver1 receiver1=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed= (EditText) this.findViewById(R.id.ed); sendbtn= (Button) this.findViewById(R.id.btnsend); sendbtn.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btnsend: String msg=ed.getText().toString(); Intent it=new Intent("com.rj141.sb.broadcastreceiverdemo.hello"); it.putExtra("msg", msg); this.sendOrderedBroadcast(it,null); break; } } }
才能终止广播而不报错this.sendOrderedBroadcast(it,null);<span style="color:#cc7832;"> </span><pre name="code" class="java"><span style="color:#000000;">abortBroadcast();//终止广播</span>
MyReceiver1,MyReceiver2是一样的
public class MyReceiver1 extends BroadcastReceiver { //intent中已经说明了,这是约定俗成的。 public static final String ACTION="com.rj141.sb.broadcastreceiverdemo.intent.action.MyReceiver1"; @Override public void onReceive(Context context, Intent intent) { String msg=intent.getStringExtra("msg"); Log.i("1",msg); } }
4.为消息设置权限
AndroidManifest.xml
<permission android:protectionLevel="normal" android:name="com.rj141.sb.broadcastreceiverdemo.MY_Permission"/>//设置权限 <uses-permission android:name="com.rj141.sb.broadcastreceiverdemo.MY_Permission"/>//申请权限