本实例只有1个界面(Activity),界面上包涵一个EditText及一个按钮。当按钮被按下时,获取EditText中的内容并广播。本实例还创建了一个BroadcastReceiver,用于接收按钮按下时的广播,并将广播消息内容显示于通知栏。当点击通知栏的广播消息时另一个Activity将会被打开。完成后显示效果如下:
编程实现
1、新建一个android项目(过程省略),添加需要的文件。添加后,此项目工程目录如下:
2、编辑activity_main.xml,添加一个EditText和一个按钮,完成后内容大致如下:
3、编辑MainActivity.java文件,MainActivity.java中定义了类MainActivity。MainActivity继承自Activity,以activity_main.xml定义的界面为显示界面。当activity_main.xml上的按钮按下时,获取EditText的内容并发送广播。MainActivity.java内容如下:
packagecom.broadcastreceiver.broadcastreceiverproject;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;importandroid.content.Context;importandroid.content.Intent;public class MainActivity extendsActivity {privateContext mContext;privateButton btnSendBroadcast;privateEditText etBroadcastContent;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext= this;
btnSendBroadcast=(Button)findViewById(R.id.button1);
btnSendBroadcast.setOnClickListener(newbtnSendBroadcast_Listener());
etBroadcastContent=(EditText)findViewById(R.id.editText1);
}private class btnSendBroadcast_Listener implementsView.OnClickListener
{
@Overridepublic voidonClick(View v)
{
String content=etBroadcastContent.getText().toString().trim();if (content.length() < 1)
{//显示某些内容,此处用于提醒,效果见最后
Toast.makeText(mContext, etBroadcastContent.getHint(), Toast.LENGTH_SHORT).show();return;
}
Intent intent= newIntent();
intent.setAction("com.eoeandroid.action.BroadcastReceiverTest");
intent.putExtra("msg_content", content);
sendBroadcast(intent);
}
}
}
4、编辑HelloBroadcastReceiver.java文件,此文件中定义了广播接收器BroadcastReceiver,用于接收MainActivity中发送的广播。接收到广播后,将广播的内容显示与通知栏。HelloBroadcastReceiver.java文件内容如下:
packagecom.broadcastreceiver.broadcastreceiverproject;importandroid.content.BroadcastReceiver;importandroid.content.Context;importandroid.content.Intent;importandroid.app.NotificationManager;importandroid.app.Notification;importandroid.app.PendingIntent;public class HelloBroadcastReceiver extendsBroadcastReceiver
{privateContext context;
@Overridepublic voidonReceive(Context context, Intent intent)
{this.context =context;
showNotification(intent);
}//通知栏显示消息
private voidshowNotification(Intent intent)
{
NotificationManager notificationManager=(NotificationManager)context
.getSystemService(Context.NOTIFICATION_SERVICE);//一组将被执行的Intent集合
Intent aIntent[] = new Intent[1];
aIntent[0] = new Intent(context, MainActivity.class);
PendingIntent pendingIntent= PendingIntent.getActivities(context, 0, aIntent, 0);
String title= intent.getExtras().getString("msg_content");
Notification noti= newNotification.Builder(context)
.setContentTitle(title.subSequence(0, title.length()))
.setContentText(title.subSequence(0, title.length()))
.setSmallIcon(R.drawable.ic_launcher)
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingIntent)//调用后当通知栏消息被点击时,Intent集合被执行
.build();
notificationManager.notify(R.layout.activity_main, noti);
}
}
5、最后需要注册广播接收器,本实例采用静态方式注册。在AndroidManifest.xml的内添加以下内容:
6、Toast.makeText(mContext, etBroadcastContent.getHint(), Toast.LENGTH_SHORT).show() 显示效果如下: