Android App开发学习第8天:消息、通知与广播

通过Toast显示消息提示框

创建Toast对象
new Toast(context)
makeText()

设置消息提示样式
调用show方法

Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();

使用AlertDialog实现对话框

应用AlertIDalog类实现4中不同类型的对话框。

  1. 显示带取消、确定按钮的对话框
    AlertDialog
    setIcon()
    setTitle()
    setMessage()
    setButton()
    调用show()方法
Button button1 = this.findViewById(R.id.btn_1);
//        显示带取消、确定按钮的对话框。
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create();//创建AlertDialog对象
                alertDialog.setIcon(R.drawable.apple); //设置图标
                alertDialog.setTitle("乔布斯:");//设置标题
                alertDialog.setMessage("赚够100W");   //设置内容
                alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "否", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"你单击了否按钮",Toast.LENGTH_LONG).show();
                    }
                });//取消按钮
                 alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "是", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"你单击了是按钮",Toast.LENGTH_LONG).show();
                    }
                });//确认按钮
                alertDialog.show();
            }
        });
  1. 显示带列表的对话框
    AlertDialog.Builder
    setIcon()
    setTitle()
    setItems()
    setPositiverButton
    调用Builder对象的.create().show()方法

//        显示带列表的对话框
        Button button2 = this.findViewById(R.id.btn_2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //带4个列表项的列表对话框
                String[] items= new String[]{"友善待人","用于承担","永怀感激","乐于助人"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); //创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.like);   //设置图标
                builder.setTitle("请选择你喜欢的名言:");//设置标题
                builder.setItems(items, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this,"您选择了【"+items[which]+"】",Toast.LENGTH_LONG).show();
                    }
                });//添加列表项
                builder.create().show();//创建并显示对话框
            }
        });
  1. 显示带单选列表项的对话框
    AlertDialog.Builder
    setIcon()
    setTitle()
    setSingleChoiceItems()
    setPositiverButton
    调用Builder对象的.create().show()方法
//        显示带单选列表项的对话框
        Button button3 = this.findViewById(R.id.btn_3);
        button3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //带单选列表项的对话框
                String[] items = new String[]{"小红","小橙","小绿","小黄","小蓝"};
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//创建AlertDialog.Builder对象
                builder.setIcon(R.drawable.select);//设置图标
                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_LONG).show();
                    }
                });//添加列表项
                builder.setPositiveButton("确定",null);
                builder.create().show();// 创建并显示对话框
            }
        });
  1. 显示带多选列表项的对话框
    AlertDialog.Builder
    setIcon()
    setTitle()
    setMultiChoiceItems()
    setPositiverButton
    调用Builder对象的.create().show()方法

//        显示带多选列表项的对话框
        Button button4 = this.findViewById(R.id.btn_4);
        button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //带多选选项的对话框
                boolean[] checkedItems = new boolean[]{false,true,false,true,false}; //记录个列表项的状态
                String[] items =    new String[]{"数学","语文","体育","英语","物理"}; //各列表项要显示的内容
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//创建一个AlertDialog.Builder对象
                builder.setIcon(R.drawable.select);
                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_LONG).show();
                        }
                    }
                });//添加确定按钮
                builder.create().show();//创建并显示对话框

            }
        });
    }

使用Notification显示通知

使用Notification显示通知的步骤
1.获取系统的NotificationManager服务getSystemService()
2.创建Notification对象
3.为Notification对象设置属性
4.发送Notification通知NotificationManager类的notify()方法


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 noficationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//获取一个通知管理器
        Notification.Builder notification = new Notification.Builder(MainActivity.this);//创建一个通知对象
        notification.setAutoCancel(true);//设置通知打开后,自动消失
        notification.setSmallIcon(R.drawable.bell);//设置通知图标
        notification.setContentTitle("奖励百万红包!!!");//设置通知的内容标题
        notification.setContentText("点击查看详情");//设置通知的内容
        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);//延迟启动,当点击查看详情时再启动要跳转的activity
        notification.setContentIntent(pi);//设置通知栏点击跳转
        noficationManager.notify(NOTIFYID,notification.build()); //发送通知
    }
}

使用BroadcastReceiver

可以以通知,对话框,消息提示框来接收广播
全局广播
两种广播类型:
标准广播:异步发送广播,当广播发送后,所有接收器会同时接收到。
有序广播:同步发送广播,只有当一个接收器接收到广播并处理完自身的逻辑后才会发送个下一个接收器。

两种广播注册方式:
动态注册:在Java代码中指定IntentFilter,然后添加不同的Action,想监听什么广播就添加什么Action,但需要调用unregisterReceiver取消广播注册。

public class MyBRReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"网络状态发生改变~",Toast.LENGTH_SHORT).show();
    }
}
public class MainActivity extends AppCompatActivity {

    MyBRReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //核心部分代码:
        myReceiver = new MyBRReceiver();
        IntentFilter itFilter = new IntentFilter();
        itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
        registerReceiver(myReceiver, itFilter);
    }

    //别忘了将广播取消掉哦~
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
}

静态注册:动态注册需要在程序启动后才能监听广播,静态注册则可以在程序未启动时也能监听广播,在AndroidManifest.xml中,指定<intentReceiver就能在程序未启动的情况下监听广播了。

1.发送广播

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = this.findViewById(R.id.broadcast);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发送一条广播
                Intent intent = new Intent();
                intent.setAction("zuckerberg");//为Itent添加动作zukerberg
                sendBroadcast(intent);//发送广播
            }
        });
    }
}

2.自定义广播接收器

public class MyReceiver extends BroadcastReceiver {
    private  static  final String ACTION1 ="zuckerberg";//动作1
    private  static  final String ACTION2 ="mayun";//动作2
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION1)){
            Toast.makeText(context, "MyReceiver收到:扎克伯格的广播", Toast.LENGTH_SHORT).show();
        }else if (intent.getAction().equals(ACTION2)){
            Toast.makeText(context, "MyReceiver收到:马云的广播", Toast.LENGTH_SHORT).show();
        }
    }
}

3.在Androidmainifest.xml中注册广播接收器

<!--    注册广播接收器    -->
        <receiver android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="zuckerberg"/>
                <action android:name="mayun"/>
            </intent-filter>

        </receiver>

本地广播

使用AlarmManager设置闹钟

闹钟类型:
AlarmManager.ELAPSED_REALTIME: 闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;
AlarmManager.ELAPSED_REALTIME_WAKEUP 闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;
AlarmManager.RTC 闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;
AlarmManager.RTC_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;
AlarmManager.POWER_OFF_WAKEUP 表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一, 该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;

PS:如果是REALTIME的话就用: SystemClock.elapsedRealtime( )方法可以获得系统开机到现在经历的毫秒数 如果是RTC的就用:System.currentTimeMillis()可获得从1970.1.1 0点到 现在做经历的毫秒数

设置时间选择器和设置闹钟按钮

   <TimePicker
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:id="@+id/time"/>
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/set"
        android:text="设置闹钟"
        android:layout_gravity="center"></Button>

设置闹钟内容

public class AlarmActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alarm);
        AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setIcon(R.drawable.alarm);//设置对话框图标
        alertDialog.setTitle("传递正能量:");//设置对话框的标题
        alertDialog.setMessage("要么出众,要么出局");//设置要显示的内容
        //添加确定按钮
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        alertDialog.show();//显示对话框

    }
}

设置闹钟时间

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TimePicker timePicker = this.findViewById(R.id.time);//获取时间拾取组件
        timePicker.setIs24HourView(true);   //设置使用24小时制
        Button button1 = this.findViewById(R.id.set);   //获取“设置闹钟”按钮
        //为“设置闹钟”按钮添加单击事件监听器
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //设置闹钟
                Intent intent = new Intent(MainActivity.this, AlarmActivity.class); //创建一个Intent对象
                PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,0); //获取显示闹钟的PendingItent对象
                AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);//获取AlarmManager对象
                Calendar c= Calendar.getInstance();//获取一个日历对象
                c.set(Calendar.HOUR_OF_DAY,timePicker.getCurrentHour());//设置闹钟的小时数
                c.set(Calendar.MINUTE,timePicker.getCurrentMinute());//设置闹钟的分钟数
                c.set(Calendar.SECOND,0);//设置闹钟的秒数
                alarm.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);//设置一个闹钟
                Toast.makeText(MainActivity.this,"闹钟设置成功",Toast.LENGTH_SHORT).show();
            }
        });
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值