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

本实例只有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() 显示效果如下:

原文地址:https://www.cnblogs.com/xiaojihua20/p/4186882.html