Android 消息通知

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_SHORTToast.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

在状态栏显示通知。

基本步骤:

  1. 获取通知管理器

    final NotificationManager notificationManager =
                    (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    
  2. 创建通知对象

    Notification.Builder notification = new Notification.Builder(this); // 创建一个Notification对象
    
  3. 设置通知的属性

    // 设置打开该通知,该通知自动消失
    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
    
  4. 创建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);
    
  5. 发送通知

    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>     

猜你喜欢

转载自blog.csdn.net/teolih/article/details/118759985