Android:消息、通知与广播

一、使用Toast显示消息提示框

步骤:

1、创建Toast对象,调用构造方法(new Toast(context))或调用方法makText()方法(显示内容和持续的时间)。

2、是遏制消息提示的样式,对齐方式,页边距等。

3、调用show()方法显示提示框。

二、使用AlertDialog实现对话框

在退出或其它需要再次确认的操作时,弹出对话框,样式如下:

Android:消息、通知与广播

 实例:显示普通对话框,列表对话框,单选对话框和多选对话框。

Android:消息、通知与广播

 主要代码如下。

package com.example.alertdialog;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

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

        final Button btn1 = findViewById(R.id.btn1),
                btn2 = findViewById(R.id.btn2),
                btn3 = findViewById(R.id.btn3),
                btn4 = findViewById(R.id.btn4);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();//创建AlertDialog对象
                alertDialog.setIcon(R.drawable.bell);//设置图标
                alertDialog.setTitle("乔布斯:");//设置标题
                alertDialog.setMessage("活着就是为了改变世界,难道还有其他原因吗?");//设置内容
                alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE/*取消按钮*/, "", new DialogInterface.OnClickListener() {
                    @Override
                    //为添加的取消按钮设置监听器
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"",Toast.LENGTH_SHORT).show();
                    }
                });

                alertDialog.setButton(DialogInterface.BUTTON_POSITIVE/*确定按钮*/, "", new DialogInterface.OnClickListener() {
                    @Override
                    //为添加的确定按钮设置监听器
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"",Toast.LENGTH_SHORT).show();
                    }
                });
                alertDialog.show();//显示
            }
        });

        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //带4个列表项的对话框
                final String[] items = new String[]{"1", "2", "3", "4"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//创建对象
                builder.setIcon(R.drawable.bell);
                builder.setTitle("选择:");
                builder.setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"你选择了:"+items[which],Toast.LENGTH_SHORT).show();
                    }
                });//添加列表项
                builder.create().show();//创建并显示对话框
            }
        });

        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //带单选列表项的对话框
                final String[] items = new String[]{"1","2","3"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.bell);
                builder.setTitle("选择");
                builder.setSingleChoiceItems(items, 0/*默认选中第一个*/, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"你选择了:"+items[which],Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setPositiveButton("确定",null);
                builder.create().show();
            }
        });

        btn4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //带多选列表项的对话框
                final boolean[]  checkedItems = new boolean[]{false,true,false,true,false};//记录各个选项是否被选中
                final String[] items = new String[]{"1","2","3","4","5"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.drawable.bell);
                builder.setTitle("选择");
                builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        checkedItems[which] = isChecked;//改变被操作列表项的状态
                    }
                });
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String result = "";//记录结果的字符串
                        for(int i=0;i<checkedItems.length;i++){
                            if(checkedItems[i]){
                                result+=items[i]+"";//把列表项的内容加到result中
                            }
                        }
                        if(!"".equals(result)){
                            Toast.makeText(MainActivity.this,"你选择了:"+result,Toast.LENGTH_SHORT).show();
                        }
                    }
                });
                builder.create().show();
            }
        });
    }
}

 三、使用Notification发送通知

主要表示在状态栏上显示的时间,电量等,还有通知图标,从顶部下滑可以查看详情。

Android:消息、通知与广播

 使用Notification显示通知的步骤

1、获取系统的NotificationManager服务,调用getSystemService()方法。

2、创建Notification对象。

3、为Notification对象设置属性。

4、发送Notification通知,调用NotificationManager的notify()方法。

代码实现:

package com.example.notification;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    final  int NOTIFYID = 0x123;//通知ID
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建并发送通知
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//获取通知管理器
        Notification.Builder notification = new Notification.Builder(MainActivity.this);//创建通知对象
        notification.setAutoCancel(true);//设置通知打开后自动消失
        notification.setSmallIcon(R.drawable.bell);//设置通知图标
        notification.setContentTitle("奖励百万红包!!!!");//设置通知内容标题
        notification.setContentTitle("点击查看详情!");//设置通知内容
        notification.setWhen(System.currentTimeMillis());//计时发送
        notification.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE);//设置声音和震动
        //创建一个启动详细页面的intent对象
        Intent intent = new Intent(MainActivity.this,DetailActivity.class);
        PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);//稍晚触发的intent机制,也就是说在我们查看通知的详细内容后再触发intent
        notification.setContentIntent(pi);//设置通知栏点击跳转
        notificationManager.notify(NOTIFYID,notification.build());//发送通知
    }
}

四、使用BroadcastReceiver(广播接收器)

在Android中,用intent携带的数据代表发送一条广播,然后通过注册BroadcastReceiver来接收广播。

广播没有自己的表现形式,可以用通知、对话框和消息提示框等展示出来。

五、使用AlarmManager设置闹钟

实例:

1、在main.xml中设置布局文件,主要是添加时间选择器和确认按钮。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TimePicker
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <Button
        android:id="@+id/set"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="20dp"
        android:text="设置闹钟"/>

</RelativeLayout>

2、在MainActivity中设置闹钟。

package com.example.alarm;

import androidx.appcompat.app.AppCompatActivity;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TimePicker;
import android.widget.Toast;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TimePicker timePicker = findViewById(R.id.time);
        timePicker.setIs24HourView(true);//设置24小时制
        Button button =findViewById(R.id.set);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置闹钟
                Intent intent = new Intent(MainActivity.this,AlarmActivity.class);
                PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,0);//获取显示闹钟的PendingIntent对象
                AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);//获取对象
                Calendar calendar = Calendar.getInstance();//获取日历对象
                calendar.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());//设置小时数
                calendar.set(Calendar.MINUTE,timePicker.getCurrentMinute());//分钟数
                calendar.set(Calendar.SECOND,0);//设置开始的秒数,0秒
                alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);//设置了闹钟
                Toast.makeText(MainActivity.this,"设置闹钟成功",Toast.LENGTH_SHORT).show();
            }
        });
    }
}

其中在 alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent) 中,第一个参数代表闹钟类型,具体属性值如下:

Android:消息、通知与广播

3、设置调转的AlarmActivity

package com.example.alarm;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;

public class AlarmActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle("传递正能量:");
        alertDialog.setMessage("要么出众,要么出局。");
        alertDialog.setIcon(R.mipmap.bell);
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(AlarmActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
        alertDialog.show();


    }
}

便可实现,到达时间时,弹出消息提示框。

Android:消息、通知与广播

Android:消息、通知与广播

上一篇:直连Pixiv的N种姿势——Android,iOS,Mac,Windows&Linux


下一篇:左右移动案例