blob: f60646a46f43de2ecd0377f175240cba1dd4c028 [file] [log] [blame]
page.title=Thông báo
page.tags=notifications
helpoutsWidget=true
page.image=/preview/images/notifications-card.png
trainingnavtop=true
@jd:body
<div id="qv-wrapper">
<div id="qv">
<!-- table of contents -->
<h2>Tài liu này gm có</h2>
<ol>
<li><a href="#direct">Tr li Trc tiếp</a></li>
<li><a href="#bundle">Thông báo Gp</a></li>
<li><a href="#custom">Dng xem Tùy chnh</a></li>
</ol>
</div>
</div>
<p>Android N gii thiu mt s API mi cho phép ng dng đăng
các thông báo có kh năng hin th và tương tác cao.</p>
<p>Android N m rng API thông báo {@link android.support.v4.app.RemoteInput}
hin có để h tr tr li gia dòng trên thiết b cm tay. Tính năng này cho phép người dùng
phn hi nhanh chóng t khu vc hin th thông báo mà không cn truy cp ng dng ca bn.</p>
<p>
Android N cũng cho phép bn gp các thông báo tương t nhau để
xut hin dưới dng mt thông báo đơn lẻ. Để điu này có th xy ra, Android N s dng phương thc {@link
android.support.v4.app.NotificationCompat.Builder#setGroup
NotificationCompat.Builder.setGroup()} hin có. Người dùng có th m rng mi
thông báo, và thc hin các hành động như tr li và b qua trên mi
thông báo, tng thông báo mt t khu vc hin th thông báo.
</p>
<p>Cui cùng, Android N cũng thêm các API mi cho phép bn tn dng các trang trí
ca h thng trong các dng xem thông báo tùy chnh ca ng dng ca bn. Các API này giúp
đảm bo rng dng xem thông báo có chung mt cách trình bày nht quán
vi các mu tiêu chun.</p>
<p>Tài liu này nêu bt mt s các thay đổi chính mà bn cn cân nhc
khi s dng các tính năng thông báo mi trong ng dng ca mình.</p>
<h2 id="direct">Tr li Trc tiếp</h2>
<p>Vi tính năng Tr li Trc tiếp trong Android N, người dùng có th
phn hi li tin nhn văn bn hoc cp nht danh sách tác v trc tiếp trong giao din
ca thông báo. Trên thiết b cm tay, hành động tr li gia dòng xut hin dưới dng mt nút b sung
được gn kèm vi thông báo đó. Khi người dùng tr li qua bàn phím, h thng s đính kèm
phn hi bng văn bn vi ý định
bn đã quy định cho hành động thông báo và gi ý định đến ng dng cm tay
ca bn.
<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
{@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
<p class="img-caption">
<strong>Hình 1.</strong> Android N thêm nút hành động <strong>Reply</strong>
.
</p>
<h3>Thêm các hành động tr li gia dòng</h3>
<p>Để to mt hành động thông báo h tr tr li trc tiếp:
</p>
<ol>
<li>To thc thể{@link android.support.v4.app.RemoteInput.Builder}
mà bn có th thêm vào hành động
thông báo ca bn. Hàm dng ca lp này s chp nhn xâu mà h thng s dng làm khóa
cho nhp liu văn bn. Sau đó, ng dng cm tay ca bn s dng khóa đó để truy xut văn bn
nhp liu.
<pre>
// Key for the string that's delivered in the action's intent
private static final String KEY_TEXT_REPLY = "key_text_reply";
String replyLabel = getResources().getString(R.string.reply_label);
RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
.setLabel(replyLabel)
.build();
</pre>
</li>
<li>Đính kèm đối tượng {@link android.support.v4.app.RemoteInput}
vi mt hành động bng cách s dng <code>addRemoteInput()</code>.
<pre>
// Create the reply action and add the remote input
Notification.Action action =
new Notification.Action.Builder(R.drawable.ic_reply_icon,
getString(R.string.label), replyPendingIntent)
.addRemoteInput(remoteInput)
.build();
</pre>
</li>
<li>Áp dng hành động cho thông báo và phát hành thông báo.
<pre>
// Build the notification and add the action
Notification notification =
new Notification.Builder(mContext)
.setSmallIcon(R.drawable.ic_message)
.setContentTitle(getString(R.string.title))
.setContentText(getString(R.string.content))
.addAction(action))
.build();
// Issue the notification
NotificationManager notificationManager =
NotificationManager.from(mContext);
notificationManager.notify(notificationId, notification);
</pre>
</li>
</ol>
<p> H thng s nhc người dùng nhp liu mt phn hi khi chúng kích hot
hành động thông báo. </p>
<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
{@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
<p class="img-caption">
<strong>Hình 2.</strong> Người dùng nhp liu văn bn t khu vc hin th thông báo.
</p>
<h3>Truy xut mc nhp ca người dùng t tr li gia dòng</h3>
<p>Để nhn mc nhp ca người dùng t giao din thông báo đến hot động bn
đã khai báo trong ý định ca hành động tr li:</p>
<ol>
<li> Gi {@link android.support.v4.app.RemoteInput#getResultsFromIntent
getResultsFromIntent()} bng cách chuyn ý định ca hành động thông báo dưới dng
tham s đầu vào. Phương thc này tr v {@link android.os.Bundle}
có cha phn hi văn bn.
</li>
<pre>
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
</pre>
<li>Truy vn gói bng cách s dng khóa kết qu (đã cung cp cho hàm dng {@link
android.support.v4.app.RemoteInput.Builder}).
</li>
</ol>
<p>Đon mã sau minh ha cách thc mt phương thc truy xut văn bn đầu vào
t mt gói:</p>
<pre>
// Obtain the intent that started this activity by calling
// Activity.getIntent() and pass it into this method to
// get the associated string.
private CharSequence getMessageText(Intent intent) {
Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
if (remoteInput != null) {
return remoteInput.getCharSequence(KEY_TEXT_REPLY);
}
return null;
}
</pre>
<p>ng dng có th áp dng lô-gic để quyết định hành động nào nên ly trên văn bn
được truy xut.
Đối vi các ng dng tương tác (chng hn như trò chuyn), hãy cung cp thêm ng cnh trong chính thông báo
(ví d như nhiu dòng lch s trò chuyn, gm có các tin nhn ca riêng người dùng)
để người dùng có th phn hi phù hp.
Khi người dùng phn hi qua {@link android.support.v4.app.RemoteInput},
hãy bao gm văn bn trong lch s tr li bng phương thc {@code setRemoteInputHistory()}
.</p>
<h2 id="bundle">Thông báo Gp</h2>
<p>Android N cung cp cho các nhà phát trin mt cách mi để hin th
hàng đợi thông báo: <i>thông báo gp</i>. Cách hin th này tương t vi tính năng
<a href="{@docRoot}training/wearables/notifications/stacks.html">Ngăn xếp
Thông báo</a> có trong Android Wear. Ví dụ, nếu ng dng ca bn to thông báo
cho tin nhn nhn được, khi có nhiu hơn mt tin nhn nhn được, hãy gói
các thông báo li vi nhau thành mt nhóm đơn lẻ. Bn có th
s dng phương thc {@link android.support.v4.app.NotificationCompat.Builder#setGroup
Builder.setGroup()} hin có để gói các thông báo tương tự.</p>
<p>
Nhóm thông báo s quy định phân cp trên các thông báo bao gm nó.
trên cùng ca phân cp là thông báo m hin th tóm tt
thông tin cho nhóm đó. Người dùng có th m rng
nhóm thông báo tăng dn lên, và h thng s hin th thêm thông tin khi
người dùng truy sâu hơn. Khi người dùng m rng gói này, h thng s l ra thêm
thông tin cho tt c các thông báo con ca gói, khi người dùng
m rng mt trong nhng thông báo đó, h thng s l ra toàn b ni dung ca nó.
</p>
<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
{@docRoot}preview/images/bundles_2x.png 2x" width="300">
<p class="img-caption">
<strong>Hình 3.</strong> Người dùng có th m rng nhóm
thông báo tăng dn lên.
</p>
<p>Để tìm hiu cách thêm thông báo vào mt nhóm, xem
<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Thêm
Mi Thông báo vào mt Nhóm</a>.</p>
<h3 id="best-practices">Thc hành tt nht cho thông báo gp</h3>
<p>Mc này s cung cp hướng dn v vic khi nào s dng nhóm thông báo thay vì
các thông báo{@link android.app.Notification.InboxStyle InboxStyle}
có sn trong các phiên bn cũ hơn ca
nn tng Android.</p>
<h3>Khi nào nên s dng thông báo gp</h3>
<p>Bn nên s dng các nhóm thông báo ch khi tt c các điu kin sau là
đúng đối vi trường hp s dng ca bn:</p>
<ul>
<li>Thông báo con là loi thông báo đầy đủ và có th được hin th
riêng r mà không cn tóm tt nhóm.</li>
<li>S có li khi làm ni lên các thông báo con mt cách riêng rẽ. Ví
dụ:
</li>
<ul>
<li>Các thông báo này có th hành động được, bng các hành động c th cho mi thông báo con.</li>
<li>Có nhiu thông tin hơn đối vi thông báo con mà người dùng s mun đọc.</li>
</ul>
</ul>
<p>Các ví d v các trường hp s dng tt nhóm thông báo bao gm: ng dng nhn tin
hin th danh sách các tin nhn đến, hoc ng dng email hin th danh sách
các email đã nhn được.</p>
<p>
Ví d v các trường hp trong đó mt thông báo đơn l được ưu tiên
bao gm tin nhn riêng t mt người đơn lẻ, hoc biu din danh sách
các mc văn bn mt hàng. Bn có th s dng
({@link android.app.Notification.InboxStyle InboxStyle} hoc
{@link android.app.Notification.BigTextStyle BigTextStyle}) để hoàn thành
vic này.
</p>
<h3 id ="post">Hin th Thông báo gp</h3>
<p>
ng dng s luôn đăng tóm tt nhóm, ngay c khi nhóm ch cha
mt thông báo con duy nht. H thng này s ngăn chn tóm tt và hin th trc tiếp
thông báo con nếu nó ch cha mt thông báo duy nht. Điu này đảm bo
rng h thng có th cung cp mt tri nghim nht quán khi người dùng trượt nhanh khi
thông báo con ca nhóm.
</p>
<p class="note">
<strong>Lưu ý:</strong> Phiên bn Android N này không
ngăn chn tóm tt cho nhóm thông báo có cha mt thông báo con duy nht. Chc năng
này s được thêm vào trong phiên bn sau ca Android N.
</p>
<h3>Thông báo lướt nhanh</h3>
<p>Trong khi h thng thường hin th các thông báo con dưới dng mt nhóm, bn có th đặt
chúng tm thi hin th dưới dng
<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
thông báo cnh báo</a>. Tính năng này đặc bit hu ích bi vì nó cho phép
truy cp ngay lp tc thông báo con gn đây nht và các hành động liên kết vi thông báo con đó.
</p>
<h3>Tính tương thích ngược</h3>
<p>
C nhóm thông báo và đầu vào t xa đều là mt phn ca API {@link
android.app.Notification} vì Android 5.0 (API mc 21) h tr
các thiết b Android Wear. Nếu bn đã dng các thông báo bng các API này,
hành động duy nht bn cn phi thc hin là xác minh rng ng dng có hành vi tương ng
vi các hướng dn đã mô t trên, và cân nhc vic trin khai {@code
setRemoteInputHistory()}.
</p>
<p>
Để h tr tính tương thích ngược, các API ging vy s được cung cp cho
lp {@link android.support.v4.app.NotificationCompat}
ca thư vin h trợ, cho phép bn dng các thông báo hot động trên các phiên bn
Android cũ hơn. Trên máy tính bng và thiết b cm tay, người dùng ch nhìn thy thông báo tóm tt,
vì vy ng dng vn có kiu hòm thư hoc thông báo tương t
biu din cho toàn b ni dung thông tin ca nhóm. Vì các thiết b Android
Wear cho phép người dùng xem các thông báo con thm chí trên
các mc nn tng thp hơn, bn nên dng các thông báo con dù cho mc API
là mc nào.
</p>
<h2 id="custom"> Dng xem Tùy chnh</h2>
<p>Bt đầu t Android N, bn có th tùy chnh dng xem và
vn có các trang trí h thng như tiêu đề thông báo, hành động, và
các b trí m rng được.</p>
<p>Để kích hot kh năng này, Android N thêm các API sau để to kiu cho dng xem tùy chnh
ca bn:</p>
<dl>
<dt>
{@code DecoratedCustomViewStyle()}</dt>
<dd> Thông báo kiu khác vi thông báo
media.</dd>
<dt>
{@code DecoratedMediaCustomViewStyle()}</dt>
<dd> Thông báo media to kiu.</dd>
</dl>
<p>Để s dng API mi này, hãy gi phương thc {@code setStyle()}, chuyn nó sang
kiu dng xem tùy chnh mong mun.</p>
<p>Đon mã này cho biết cách dng đối tượng thông báo tùy chnh bng phương thc
{@code DecoratedCustomViewStyle()}.</p>
<pre>
Notification noti = new Notification.Builder()
.setSmallIcon(R.drawable.ic_stat_player)
.setLargeIcon(albumArtBitmap))
.setCustomContentView(contentView);
.setStyle(new Notification.DecoratedCustomViewStyle())
.build();
</pre>