您的位置:首页 > 其它

Broadcast使用以及在通知栏显示消息

2014-12-26 15:31 183 查看
本实例只有1个界面(Activity),界面上包涵一个EditText及一个按钮。当按钮被按下时,获取EditText中的内容并广播。本实例还创建了一个BroadcastReceiver,用于接收按钮按下时的广播,并将广播消息内容显示于通知栏。当点击通知栏的广播消息时另一个Activity将会被打开。完成后显示效果如下:





编程实现

1、新建一个android项目(过程省略),添加需要的文件。添加后,此项目工程目录如下:



2、编辑activity_main.xml,添加一个EditText和一个按钮,完成后内容大致如下:

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.broadcastreceiver.broadcastreceiverproject.MainActivity$PlaceholderFragment" >

<EditText
android:id="@+id/editText1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10"
android:hint="@string/textEdit1_text"
android:inputType="text" >

</EditText>

<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editText1"
android:layout_below="@+id/editText1"
android:layout_marginTop="14dp"
android:text="@string/button1_text" />

</RelativeLayout>


3、编辑MainActivity.java文件,MainActivity.java中定义了类MainActivity。MainActivity继承自Activity,以activity_main.xml定义的界面为显示界面。当activity_main.xml上的按钮按下时,获取EditText的内容并发送广播。MainActivity.java内容如下:

package com.broadcastreceiver.broadcastreceiverproject;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.content.Context;
import android.content.Intent;

public class MainActivity extends Activity {

private Context mContext;
private Button btnSendBroadcast;
private EditText etBroadcastContent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mContext = this;
btnSendBroadcast = (Button)findViewById(R.id.button1);
btnSendBroadcast.setOnClickListener(new btnSendBroadcast_Listener());

etBroadcastContent = (EditText)findViewById(R.id.editText1);
}

private class btnSendBroadcast_Listener implements View.OnClickListener
{
@Override
public void onClick(View v)
{
String content = etBroadcastContent.getText().toString().trim();
if (content.length() < 1)
{
//                显示某些内容,此处用于提醒,效果见最后
Toast.makeText(mContext, etBroadcastContent.getHint(), Toast.LENGTH_SHORT).show();
return;
}

Intent intent = new Intent();
intent.setAction("com.eoeandroid.action.BroadcastReceiverTest");
intent.putExtra("msg_content", content);
sendBroadcast(intent);
}
}
}


4、编辑HelloBroadcastReceiver.java文件,此文件中定义了广播接收器BroadcastReceiver,用于接收MainActivity中发送的广播。接收到广播后,将广播的内容显示与通知栏。HelloBroadcastReceiver.java文件内容如下:

package com.broadcastreceiver.broadcastreceiverproject;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.app.NotificationManager;
import android.app.Notification;
import android.app.PendingIntent;

public class HelloBroadcastReceiver extends BroadcastReceiver
{
private Context context;

@Override
public void onReceive(Context context, Intent intent)
{
this.context = context;
showNotification(intent);
}

//通知栏显示消息
private void showNotification(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 = new Notification.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的<application>内添加以下内容:

<receiver android:name=".HelloBroadcastReceiver" android:exported="false">
<intent-filter>
<action android:name="com.eoeandroid.action.BroadcastReceiverTest"/>
</intent-filter>
</receiver>


6、Toast.makeText(mContext, etBroadcastContent.getHint(), Toast.LENGTH_SHORT).show() 显示效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐