<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="8dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RadioGroup
android:id="@+id/options_group"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp">
<TextView
android:textAppearance="?android:textAppearanceLarge"
android:text="Rich Styles"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/option_basic"
android:text="Basic Notification"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/option_bigtext"
android:text="BigText Style"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/option_bigpicture"
android:text="BigPicture Style"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/option_inbox"
android:text="Inbox Style"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginTop="8dp"
android:text="Secured Style"
android:textAppearance="?android:textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RadioButton
android:id="@+id/option_private"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Public Version Lockscreen" />
<RadioButton
android:id="@+id/option_secret"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Secret Lockscreen"/>
<RadioButton
android:id="@+id/option_headsup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Heads-Up Notification"/>
</RadioGroup>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Post a Notification"
android:onClick="onPostClick"/>
</LinearLayout>
public class NotificationActivity extends AppCompatActivity {
private RadioGroup mOptionsGroup;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification);
mOptionsGroup = (RadioGroup) findViewById(R.id.options_group);
}
public void onPostClick(View v) {
final int noteId = mOptionsGroup.getCheckedRadioButtonId();
final Notification note;
switch (noteId) {
case R.id.option_basic:
case R.id.option_bigtext:
case R.id.option_bigpicture:
case R.id.option_inbox:
note = buildStyledNotification(noteId);
break;
case R.id.option_private:
case R.id.option_secret:
case R.id.option_headsup:
note = buildSecuredNotification(noteId);
break;
default:
throw new IllegalArgumentException("Unknown Type");
}
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(noteId, note);
}
private Notification buildStyledNotification(int type) {
Intent launchIntent = new Intent(this, NotificationActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, launchIntent, 0);
// 使用发送的时间创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(NotificationActivity.this);
builder.setSmallIcon(R.drawable.btn_play)
.setTicker("发送了什么")
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND)
.setContentTitle("完成")
.setContentText("点击这里")
.setContentIntent(contentIntent);
switch (type) {
case R.id.option_basic:
// 返回简单的通知
return builder.build();
case R.id.option_bigtext:
// 包括两个动作(自定义动作)
builder.addAction(android.R.drawable.ic_menu_delete, "打电话", contentIntent);
builder.addAction(android.R.drawable.ic_media_pause, "重新发送", contentIntent);
// 在展开时使用 BigTextStyle (一个扩展样式)
NotificationCompat.BigTextStyle textStyle = new NotificationCompat.BigTextStyle(builder);
textStyle.bigText("Here is some additional text to be displayed when " +
"the notification is " + "in expanded mode. I can fit so much content " +
"into this giant view!");
textStyle.setBigContentTitle("我是BigTextStyle");
textStyle.setSummaryText("我是我是BigTextStyle的setSummaryText");
return textStyle.build();
case R.id.option_bigpicture:
// 添加一个额外的动作
builder.addAction(android.R.drawable.ic_menu_edit, "View Location", contentIntent);
// 在展开时使用 BigPictureStyle
NotificationCompat.BigPictureStyle pictureStyle = new NotificationCompat.BigPictureStyle(builder);
pictureStyle.setBigContentTitle("我是BigPictureStyle");
pictureStyle.setSummaryText("我是我是BigPictureStyle的setSummaryText");
pictureStyle.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.fd));
return pictureStyle.build();
case R.id.option_inbox:
// 在展开时使用 InboxStyle
builder.addAction(android.R.drawable.ic_menu_delete, "打电话", contentIntent);
builder.addAction(android.R.drawable.ic_media_pause, "重新发送", contentIntent);
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(builder);
inboxStyle.setSummaryText("4 New Tasks");
inboxStyle.setBigContentTitle("的方式防守打法");
inboxStyle.addLine("Male Dinner");
inboxStyle.addLine("Call Mom");
inboxStyle.addLine("Call Wife First");
inboxStyle.addLine("Pick up Kids");
return inboxStyle.build();
default:
throw new IllegalArgumentException("Unknown Type");
}
}
// 这些属性可以由用户的通知设置重写
private Notification buildSecuredNotification(int type) {
Intent launchIntent = new Intent(this, NotificationActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, launchIntent, 0);
// 构造基础通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle("账户余额更新")
.setContentText("你的余额为250,请尽快充值!")
.setTicker("发送了什么")
.setSmallIcon(R.drawable.btn_before)
.setWhen(System.currentTimeMillis())
.setStyle(new NotificationCompat.BigTextStyle().bigText("你的卡上的余额只有250,请尽快支付余下的钱!"))
.setContentIntent(contentIntent);
switch (type) {
case R.id.option_private:
// 为安全的锁定屏幕提供独特的通知版本
Notification publicNote = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.loading_01)
.setContentTitle("存款通知")
.setContentText("你已经收到一条重要消息")
.setContentIntent(contentIntent)
.build();
return builder.setPublicVersion(publicNote).build();
case R.id.option_secret:
// 从安全的锁定屏幕完全隐藏通知
builder.setVisibility(Notification.VISIBILITY_PRIVATE);
return builder.build();
case R.id.option_headsup:
// 在发布时显示警告通知
builder.setDefaults(Notification.DEFAULT_SOUND)
.setPriority(Notification.PRIORITY_HIGH);
return builder.build();
default:
throw new IllegalArgumentException("Unknown Type");
}
}
}