您的位置:首页 > 其它

广播 BroadcastReceiver

2016-04-26 12:11 281 查看
1.简单的广播

静态注册AndroidManifest.xml

<receiver
android:name=".MyReceiver1"
android:enabled="true"
android:exported="true">
</receiver>
MainActivity

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;

@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);
}
}
MyReceiver1

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

import 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;
}
}
}
MyReceiver1

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

<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>
MainActivity

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"/>//申请权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: