Android 消息通知
文章目录
1. Toast
底部弹出消息框。
基本用法:(写法比较固定)
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast.makeText(context, text, duration).show();
- context:上下文对象。固定写法。
- text:提示文字。
- duration:显示时间,值为
Toast.LENGTH_SHORT
或Toast.LENGTH_LONG
。
学习的时候好奇了下这个组件名字的由来,stackoverflow中看到了这么一段故事,还挺有趣的:
An ex-Microsoft employee of Google is credited with coining the term during the development of MSN Messenger, since Messenger’s small notification windows slide upward into view, like toast popping out of a toaster
2. AlertDialog
对话框,有以下几个部分组成:
2.1 普通对话框
样式如下:
举例代码如下:
package com.mingrisoft;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private boolean[] checkedItems;//记录各列表项的状态
private String[] items;//各列表项要显示的内容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button1); // 获取“显示带取消、确定按钮的对话框”按钮
// 为“显示带取消、确定按钮的对话框”按钮添加单击事件监听器
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建对话框对象
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();
alertDialog.setIcon(R.drawable.advise); //设置对话框的图标
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(); //显示对话框
}
});
}
}
2.2 带列表的对话框
举例代码如下:
package com.mingrisoft;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private boolean[] checkedItems;//记录各列表项的状态
private String[] items;//各列表项要显示的内容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button2 = (Button) findViewById(R.id.button2); // 获取“显示带列表的对话框”按钮
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建名言字符串数组
final String[] items = new String[]{
"当你有使命,它会让你更专注", "要么出众,要么出局", "活着就是为了改变世界",
"求知若饥,虚心若愚"};
//创建列表对话框对象
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise1); //设置对话框的图标
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(); // 创建对话框并显示
}
});
}
}
2.3 带单选按钮的对话框
举例代码如下:
package com.mingrisoft;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private boolean[] checkedItems;//记录各列表项的状态
private String[] items;//各列表项要显示的内容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button3 = (Button) findViewById(R.id.button3); // 获取“显示带单选列表项的对话框”按钮
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//创建名字字符串数组
final String[] items = new String[]{
"扎克伯格", "乔布斯", "拉里.埃里森", "安迪.鲁宾", "马云"};
// 显示带单选列表项的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise2); //设置对话框的图标
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(); // 创建对话框并显示
}
});
}
}
2.4 带多选按钮的对话框
举例代码如下:
package com.mingrisoft;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private boolean[] checkedItems;//记录各列表项的状态
private String[] items;//各列表项要显示的内容
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取“显示带多选列表项的对话框”按钮
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkedItems = new boolean[]{
false, true, false, true, false}; //记录各列表项的状态
//各列表项要显示的内容
items = new String[]{
"开心消消乐", "球球大作战", "欢乐斗地主", "梦幻西游", "超级玛丽"};
// 显示带单选列表项的对话框
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.advise2); //设置对话框的图标
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中
}
}
//当result不为空时,通过消息提示框显示选择的结果
if (!"".equals(result)) {
result = result.substring(0, result.length() - 1); //去掉最后面添加的“、”号
Toast.makeText(MainActivity.this,
"您选择了[ " + result + " ]", Toast.LENGTH_LONG).show();
}
}
});
builder.create().show(); // 创建对话框并显示
}
});
}
}
3. Notification
在状态栏显示通知。
基本步骤:
-
获取通知管理器
final NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
-
创建通知对象
Notification.Builder notification = new Notification.Builder(this); // 创建一个Notification对象
-
设置通知的属性
// 设置打开该通知,该通知自动消失 notification.setAutoCancel(true); // 设置通知的图标 notification.setSmallIcon(R.drawable.packet); // 设置通知内容的标题 notification.setContentTitle("奖励百万红包!!!"); // 设置通知内容 notification.setContentText("点击查看详情!"); //设置使用系统默认的声音、默认震动 notification.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE; //设置发送时间 notification.setWhen(System.currentTimeMillis()); // 创建一个启动其他Activity的Intent
-
创建
Intent
,用以创建PendingIntent
用以用户点击通知后启动Activity
// 创建一个启动其他Activity的Intent Intent intent = new Intent(MainActivity.this, DetailActivity.class); PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0); //设置通知栏点击跳转 notification.setContentIntent(pi);
-
发送通知
notificationManager.notify(NOTIFYID, notification.build());
举例:
package com.mingrisoft;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends Activity {
final int NOTIFYID = 0x123; //通知的ID
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取通知管理器,用于发送通知
final NotificationManager notificationManager =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification.Builder notification = new Notification.Builder(this); // 创建一个Notification对象
// 设置打开该通知,该通知自动消失
notification.setAutoCancel(true);
// 设置通知的图标
notification.setSmallIcon(R.drawable.packet);
// 设置通知内容的标题
notification.setContentTitle("奖励百万红包!!!");
// 设置通知内容
notification.setContentText("点击查看详情!");
//设置使用系统默认的声音、默认震动
notification.setDefaults(Notification.DEFAULT_SOUND| Notification.DEFAULT_VIBRATE);
//设置发送时间
notification.setWhen(System.currentTimeMillis());
// 创建一个启动其他Activity的Intent
Intent intent = new Intent(MainActivity.this
, DetailActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0,intent,0);
//设置通知栏点击跳转
notification.setContentIntent(pi);
//发送通知
notificationManager.notify(NOTIFYID, notification.build());
}
}
4. BroadcastReciver
广播接收器,借助Intent携带数据发送广播,由BroadcastReciver接收并处理。
发送广播代码:
Intent intent=new Intent(); //创建Intent对象
intent.setAction("动作名"); //为Intent添加动作com.mingrisoft
sendBroadcast(intent); //发送广播
创建一个广播接收器举例:
package com.mingrisoft;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class MyReceiver extends BroadcastReceiver {
private static final String action1="com.mingrisoft";//声明第一个动作
private static final String action2="mingrisoft"; //声明第二个动作
public MyReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(action1)){
Toast.makeText(context, "MyReceiver收到:com.mingrisoft的广播",
Toast.LENGTH_SHORT).show(); //回复该动作收到广播
}else if (intent.getAction().equals(action2)){
Toast.makeText(context, "MyReceiver收到:mingrisoft的广播",
Toast.LENGTH_SHORT).show();//回复该动作收到广播
}
}
}
使用前需要在AndroidManiFest.xml
中注册该接收器,其中android:enabled
指明该广播是否可以被实例化,andorid:exported
指定该广播接收器能否接收其他APP
的广播,<intent-filter>
对动作进行注册。
<application>
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.mingrisoft"></action>
<action android:name="mingrisoft"></action>
</intent-filter>
</receiver>
</application>
xported
指定该广播接收器能否接收其他APP
的广播,<intent-filter>
对动作进行注册。
<application>
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.mingrisoft"></action>
<action android:name="mingrisoft"></action>
</intent-filter>
</receiver>
</application>