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();


    }
}

便可實現,到達時間時,彈出消息提示框。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM