Android:消息、通知与广播
一、使用Toast显示消息提示框
步骤:
1、创建Toast对象,调用构造方法(new Toast(context))或调用方法makText()方法(显示内容和持续的时间)。
2、是遏制消息提示的样式,对齐方式,页边距等。
3、调用show()方法显示提示框。
二、使用AlertDialog实现对话框
在退出或其它需要再次确认的操作时,弹出对话框,样式如下:
实例:显示普通对话框,列表对话框,单选对话框和多选对话框。
主要代码如下。
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发送通知
主要表示在状态栏上显示的时间,电量等,还有通知图标,从顶部下滑可以查看详情。
使用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) 中,第一个参数代表闹钟类型,具体属性值如下:
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(); } }
便可实现,到达时间时,弹出消息提示框。