日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android入门(14)| 通知

發布時間:2023/12/13 Android 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android入门(14)| 通知 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 創建通知
  • 點擊效果
  • 其它小功能
  • 實例


創建通知

創建通知的步驟:

  • 管理通知的 NotificationManager,通常通過當前 Context 的 getSystemService() 獲取實例。它接受一個字符串參數用于確定獲取系統的什么服務。
  • Android 8.0(O) 版本后需要通知通道(通知類別) Notificationchannel 以細致化管理通知。
  • 使用 Builder構造器 來創建 Notification對象。可以使用 support庫 提供的 NotificationCompat類 中的 Builder 來兼容不同 Android 版本。
  • 通過 NotificationManager.notify() 顯示通知,該方法有兩個參數:
  • 每個通知都不同的 id;
  • Notification對象。

  • 點擊效果

    此時點擊該通知沒有什么反應,這需要通過 PendingIntent 實現點擊通知后的意圖。它類似于 Intent ,可以啟動活動、服務以及發送廣播等,不同的是,Intent 更傾向于立即執行某動作,而 PendingIntent 傾向于在某個時機去執行某動作。換言之,PendingIntent 是延遲執行的 Intent。

    PendingIntent 主要用到三個靜態方法以獲取實例,分別是 getActivity()、getBroadcast()、getService(),他們都有四個參數:

  • Context
  • int requestCode:請求代碼,通常傳入 0
  • Intent 對象
  • int flags:確定 PendingIntent 的行為,通常情況下傳入 0,但也有四種具體值可選:FLAG_ONT_SHOT、FLAG_CANCEL_CURRENT、FLAG_NO_CREATE、FLAG_UPDATE_CURRENT。
  • PendingIntent對象 是通過 NotificationCompat.Builder.setContentIntent() 方法來在用戶點擊通知時執行意圖的。

    如何實現點擊通知后,通知消失?

    點擊該通知后這條通知并不會消失,解決的方法有兩種:

  • 在 NotificationCompat.Builder 中連綴一個 setAutoCancel() 方法,并傳入參數 true:

  • 顯式地在點擊通知后調轉到的頁面的 onCreate 階段,通過 NotificationManager.cacel() 將他取消:


  • 其它小功能

    NotificationCompat.Builder 提供了非常豐富的 API 供我們創建多樣的通知效果,這里舉例幾個常用的:

    setSound():設置通知鈴聲,在 Android 8.0(O) 版本后需要在通知管道中添加 AudioAttributes 音頻屬性,關于 AudioAttributes 詳情見本博客。


    setVibrate():設置手機震動,參數為長整型數組,以毫秒為單位,偶數下標代表手機靜止時長,奇數下標代表手機震動時長。別忘了聲明手機震動權限:

    // 8.0 版本后需要在通知通道中設置允許震動 notificationChannel.enableVibration(true); // 通知到來時立刻震動1秒,然后靜止1秒,再震動1秒。 .setVibrate(new long[] {0, 1000, 1000, 1000})

    setLights():設置呼吸燈,參數分別指定顏色亮起時長熄滅時長。時長都以毫秒為單位。

    // 8.0 版本后需要在通知通道中設置允許啟用呼吸燈 notificationChannel.enableLights(true); .setLights(Color.CYAN, 1000, 1000)

    setStyle():構建富文本內容,如長文件、圖片等:

  • 長文字: 如果在 setContentText() 中設置的文本較長,那么多余的部分會被省略號替代。

  • 而通過 setStyle() 我們可以在下滑的通知欄中顯示完整內容(通知彈窗中的多余內容仍會被省略號替代):

    .setStyle(new NotificationCompat.BigTextStyle().bigText("聯系人cmy向您發來一條消息哈哈哈哈哈哈哈哈哈哈哈哈哈哈"))

  • 圖片: 也可以在通知內容中加入圖片:
  • // 圖片,通過BitmapFactory.decodeResource()將圖片解析成Bitmap對象 .setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.cmy1)))


    setPriority():設置通知的重要程度

    共有五個常量值可選:

  • PRIORITY_DEFAULT: 默認,不特意設置時就是此值。
  • PRIORITY_MIN: 最低的重要程度,系統只會在用戶下拉狀態欄等特定情況才會顯示該通知。
  • PRIORITY_LOW:較低的重要程度,系統會將該類通知縮小,顯示順序在 PRIORITY_HIGH 之后。
  • PRIORITY_HIGH:較高的重要程度,系統會將這類通知放大,顯示順序在 PRIORITY_MAX 之后。
  • PRIORITY_MAX:最高的重要程度,系統會讓用戶立刻看到該通知,甚至需要用戶做出響應操作。
  • 在 Android 8.0 版本后,通知的重要程度作為通知管道 NotificationChannel 構造函數的第三個參數存在,有以下值可選:

  • NotificationManager.lMPORTANCE_UNSPECIFIED,
  • NotificationManager.IMPORTANCE_NONE
  • NotificationManager.IMPORTANCE_MIN
  • NotificationManager.IMPORTANCE_LOW
  • NotificationManager.IMPORTANCE_DEFAULT
  • NotificationManager.IMPORTANCE_HIGH
  • PS: 如若上述設置未生效,則應卸載軟件重新安裝后重試,這是因為所有配置都是在第一次創建通道時生效的


    實例

    實現通過點擊按鈕發出通知:

    布局文件 notice_layout.xml:

    活動文件:

    public class NotificationActivity extends AppCompatActivity implements View.OnClickListener{private static final String TAG = "NotificationActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.notice_layout);Button button_send = findViewById(R.id.button_sendNotice);button_send.setOnClickListener(this);}public void onClick(View v){switch (v.getId()){case R.id.button_sendNotice:// 通知音頻的UriUri soundUri = Uri.parse("android.resource://"+getPackageName()+ "/"+R.raw.madara);Log.e(TAG, soundUri.toString());// 通知的idString id = "1";// 點擊通知后的跳轉意圖Intent intent = new Intent(this, DialogActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);/* 通知的創建流程 */// 第一步,管理通知的ManagerNotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);// 8.0(O)版本后需要通知通道(Notification channel)if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){String name = getString(R.string.app_name);// 創建通知通道// 第一個參數要和NotificationCompat.Builder的channelId一樣// 第三個參數是通知的重要程度NotificationChannel notificationChannel = new NotificationChannel(id, name,NotificationManager.IMPORTANCE_HIGH);// 如果上面用IMPORTANCE_NONE就需要在系統的設置里面開啟渠道,通知才能正常彈出/* 通知管道中開啟聲音、呼吸燈、震動等功能 */// 呼吸燈//notificationChannel.setLightColor(Color.CYAN);notificationChannel.enableLights(true);// 聲音// 先創建音頻屬性AudioAttributes audioAttributes = new AudioAttributes.Builder()// 描述音頻的內容類型,語音(speech)、音樂(music)、提示音(sonification)等.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)// 使用場景,USAGE_NOTIFICATION表明用于通知.setUsage(AudioAttributes.USAGE_NOTIFICATION).build();// 通知管道加入音頻notificationChannel.setSound(soundUri, audioAttributes);// 震動notificationChannel.enableVibration(true);// 設置是否應在鎖定屏幕上顯示此頻道的通知notificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);// 繞過免打擾模式notificationChannel.setBypassDnd(true);// 將通知通道加入管理通知的NotificationManagermanager.createNotificationChannel(notificationChannel);}// 第二步,使用builder構造器來創建Notification對象// 通過support庫提供的NotificationCompat來兼容不同版本Notification notification = new NotificationCompat.Builder(this, id).setContentTitle("消息通知").setContentText("聯系人cmy向您發來一條消息")// 長文本/*.setStyle(new NotificationCompat.BigTextStyle().bigText("聯系人cmy向您發來" +"一條消息哈哈哈哈哈哈哈哈哈哈哈哈哈哈"))*/// 圖片,通過BitmapFactory.decodeResource()將圖片解析成Bitmap對象.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.cmy1)))// 指定通知被創建的時間,該時間會顯示在通知上。.setWhen(System.currentTimeMillis())// 通知的小圖標,顯示在系統狀態欄上只能用純alpha圖層的圖片設置.setSmallIcon(R.mipmap.ic_launcher)// 大圖標,下拉系統狀態欄時可見.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.cmy1))// 點擊通知后執行的意圖.setContentIntent(pi)// 點擊通知后通知消失// .setAutoCancel(true)// 通知鈴聲//.setSound(soundUri)// 手機震動,通知到來時立刻震動1秒,然后靜止1秒,再震動1秒.setVibrate(new long[] {0, 1000, 1000, 1000})// 呼吸燈,參數分別指定顏色、亮起時長、熄滅時長,時長都以毫秒為單位.setLights(Color.CYAN, 1000, 1000)// 根據當前手機環境來決定通知鈴聲、如何震動//.setDefaults(NotificationCompat.DEFAULT_ALL)// 構造通知.build();// 第三步,顯示通知;每個通知的id都不同,第二個參數是Notification對象manager.notify(2, notification);break;default:break;}} }

    運行結果:

    點擊通知后跳轉:


    總結

    以上是生活随笔為你收集整理的Android入门(14)| 通知的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。