首先继承BroadcastReceiver类,并在manifest中注册
public class MyReceiver extends BroadcastReceiver {
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
在mainifest中注册
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
</receiver>
动态注册和取消广播接收器
上代码:
Receiver部分:
public class MyReceiver extends BroadcastReceiver {
public static final String ACTION = "peng.liu.testview.intent.action.MyReceiver";
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
System.out.println(intent.getStringExtra("data")+"hello");
}
}
主类部分:
public class MainActivity extends Activity implements View.OnClickListener{
private MyReceiver receiver = null;
private Button send,reg,unReg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.send).setOnClickListener(this);
findViewById(R.id.reg).setOnClickListener(this);
findViewById(R.id.unReg).setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.send:
Intent intent = new Intent(MyReceiver.ACTION);
intent.putExtra("data","jiekxueyuan");
sendBroadcast(intent);
break;
case R.id.reg:
if (receiver == null){
receiver = new MyReceiver();
registerReceiver(receiver,new IntentFilter(MyReceiver.ACTION));
}
break;
case R.id.unReg:
if (receiver != null){
unregisterReceiver(receiver);
receiver = null;
}
break;
}
}
}
布局代码:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="reg"
android:id="@+id/reg" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="unReg"
android:id="@+id/unReg" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="send"
android:id="@+id/send" />
</LinearLayout>
广播的优先级
这次我们在manifest中静态注册
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="8">
<action android:name="peng.liu.testview.intent.action.MyReceiver"/>
</intent-filter>
</receiver>
<receiver
android:name=".MyReceiver2"
android:enabled="true"
android:exported="true" >
<intent-filter android:priority="9">
<action android:name="peng.liu.testview.intent.action.MyReceiver"/>
</intent-filter>
</receiver>
android:priority:用于设置优先级,数字越大,优先级越高。
高优先级的终端广播
//发送部分注意是发送sendOrderedBroadcast(intent,null);
Intent intent = new Intent(MyReceiver.ACTION);
intent.putExtra("data","jiekxueyuan");
sendOrderedBroadcast(intent,null);
接收部分
public class MyReceiver2 extends BroadcastReceiver {
public MyReceiver2() {
}
@Override
public void onReceive(Context context, Intent intent) {
System.out.println(intent.getStringExtra("data"));
//这一户用于中断后面的低优先级的接受
abortBroadcast();
}
}