Notification消息通知 自定義消息通知內(nèi)容布局
具體操作:自定義消息通知內(nèi)容布局;點擊界面中心的“點擊發(fā)送消息”TextView控件,模擬發(fā)送通知消息,通知欄接收消息,點擊幾次則發(fā)送幾次,點擊通知欄消息,跳轉(zhuǎn)到詳情界面。
1.activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_show"
android:text="點擊發(fā)送消息"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
2.layout_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="18dp"
android:layout_toRightOf="@+id/imageView1"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="15dp"
android:text="TextView" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginLeft="54dp"
android:layout_toRightOf="@+id/textView2"
android:text="TextView" />
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:text="TextView" />
</RelativeLayout>
3.activity_detail.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/name"
android:textSize="18sp"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/price"
android:textSize="18sp"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Text"
android:id="@+id/detail"
android:textSize="18sp"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
4.SingletonF類:
/**
* 用于存儲消息數(shù)目
* Created by admin on 2017/9/4.
*/
public class SingletonF{
private int info_number=0;
private static class SingletonHolder {
/**
* 單例對象實例
*/
static final SingletonF INSTANCE = new SingletonF();
}
public static SingletonF getInstance() {
return SingletonHolder.INSTANCE;
}
/**
* private的構(gòu)造函數(shù)用于避免外界直接使用new來實例化對象
*/
private SingletonF() {}
public int getInfo_number() {
return info_number;
}
public void setInfo_number(int info_number) {
this.info_number = info_number;
}
// /**
// * 若SingletonF implements Serializable則必須實現(xiàn)readResolve方法
// * readResolve方法應(yīng)對單例對象被序列化時候
// */
// private Object readResolve() {
// return getInstance();
// }
}
5.MyBroadcastReceiver類:
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.NotificationCompat;
import android.util.Log;
import android.widget.RemoteViews;
public class MyBroadcastReceiver extends BroadcastReceiver {
private SingletonF singletonF;
private Context context1;
@Override
public void onReceive(Context context, Intent intent) {
this.context1 = context;
// if (intent.getStringExtra("info").equals("廣播發(fā)送了")) {
// Log.i("靜態(tài)廣播:", "廣播我已經(jīng)接受了");
// }
Message message = handler.obtainMessage();
message.what = 0;
handler.sendMessage(message);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
singletonF = SingletonF.getInstance();
int first = singletonF.getInfo_number();
first++;
Date nowTime = new Date(System.currentTimeMillis());
SimpleDateFormat sdFormatter = new SimpleDateFormat("HH:mm");
String retStrFormatNowDate = sdFormatter.format(nowTime);
singletonF.setInfo_number( first);
RemoteViews contentViews = new RemoteViews(context1.getPackageName(), R.layout.layout_item);
// 通過控件的Id設(shè)置屬性
contentViews.setImageViewResource(R.id.imageView1, R.mipmap.ic_launcher_round);
contentViews.setTextViewText(R.id.textView1, "消息標題");
contentViews.setTextViewText(R.id.textView2, "消息內(nèi)容");
contentViews.setTextViewText(R.id.textView3, " (" + first + "條新消息)");
contentViews.setTextViewText(R.id.textView4, "" + retStrFormatNowDate);
// 點擊通知欄跳轉(zhuǎn)的activity
Intent intent = new Intent(context1, ActDetail.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context1, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context1)
.setSmallIcon(R.mipmap.ic_launcher_round).setTicker("new message");
// 自動管理通知欄消息
mBuilder.setAutoCancel(true);
mBuilder.setContentIntent(pendingIntent);
/// 自定義布局
mBuilder.setContent(contentViews);
// 使用默認提示音
mBuilder.setDefaults(Notification.DEFAULT_ALL);
NotificationManager mNotificationManager = (NotificationManager) context1
.getSystemService(context1.NOTIFICATION_SERVICE);
// notify(int id, Notification notification)若id為同一個值,則通知欄只會顯示一行,并不停更新此消息內(nèi)容
// 若為類似UUID.randomUUID().hashCode()這樣不同的唯一標識符,則有幾條消息通知欄就顯示幾行
mNotificationManager.notify(1, mBuilder.build());
break;
default:
break;
}
}
};
}
6.MainActivity類:
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tv_show;
private int btn_number = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_show = (TextView) this.findViewById( R.id.tv_show);
tv_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showNotify();
btn_number++;
tv_show.setText("發(fā)送了" + btn_number + "次廣播");
}
});
}
private void showNotify() {
Intent intent = new Intent();
intent.setAction("MASSAGE_NOTIFICATION");
// intent.putExtra("info", "廣播發(fā)送了");
sendBroadcast(intent);
}
@Override
protected void onStop() {
btn_number = 0;
tv_show.setText("發(fā)送了" + btn_number + "次廣播");
super.onStop();
}
@Override
protected void onPause() {
btn_number = 0;
tv_show.setText("發(fā)送了" + btn_number + "次廣播");
super.onPause();
}
@Override
protected void onDestroy() {
btn_number = 0;
super.onDestroy();
}
}
7.ActDetail類:
import android.app.NotificationManager;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
/**
* Created by admin on 2017/9/4.
*/
public class ActDetail extends AppCompatActivity{
NotificationManager notificationManager;
SingletonF singletonF;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
singletonF = SingletonF.getInstance();
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancel(1);
singletonF.setInfo_number(0);
}
}
沒找到原創(chuàng)作者,所以也不知道來自何處,只有等以后知道原創(chuàng)作者后再補上來源網(wǎng)址!??!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中通知Notification使用實例(振動、燈光、聲音)
- Android中通過Notification&NotificationManager實現(xiàn)消息通知
- android中創(chuàng)建通知欄Notification代碼實例
- Android開發(fā) -- 狀態(tài)欄通知Notification、NotificationManager詳解
- android使用NotificationListenerService監(jiān)聽通知欄消息
- 詳解Android中Notification通知提醒
- Android種使用Notification實現(xiàn)通知管理以及自定義通知欄實例(示例四)
- iOS推送之本地通知UILocalNotification
- Android 使用AlarmManager和NotificationManager來實現(xiàn)鬧鐘和通知欄
- Android開發(fā)之Notification通知用法詳解
相關(guān)文章
在Android系統(tǒng)中使用gzip進行數(shù)據(jù)傳遞實例代碼
HTTP協(xié)議上的GZIP編碼是一種用來改進WEB應(yīng)用程序性能的技術(shù),4.4MB的文本數(shù)據(jù)經(jīng)過Gzip傳輸?shù)娇蛻舳酥笞優(yōu)?92KB,壓縮效率極高,下面與大家分享下具體的實現(xiàn)2013-06-06
Android開發(fā)之Fragment懶加載的幾種方式及性能對比
這篇文章主要介紹了Android開發(fā)之Fragment懶加載的幾種方式及性能對比的相關(guān)資料,具體詳細介紹需要的小伙伴可以參考下面文章內(nèi)容2022-05-05
Android 實時監(jiān)測(監(jiān)聽)網(wǎng)絡(luò)連接狀態(tài)變化
這篇文章主要介紹了Android 實時監(jiān)測(監(jiān)聽)網(wǎng)絡(luò)連接狀態(tài)變化的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-06-06
Android利用SurfaceView實現(xiàn)下雨的天氣動畫效果
這篇文章主要介紹了Android利用SurfaceView實現(xiàn)下雨天氣效果的相關(guān)資料,文中詳細介紹 SurfaceView 和 View 的區(qū)別,以及一些需要使用到 SurfaceView 的場景。需要的朋友可以參考借鑒,下面來一起看看吧。2017-03-03
Android dip,px,pt,sp 的區(qū)別詳解
本篇文章是對Android中dip,px,pt,sp的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06

