Android 8.0系統(tǒng)的通知欄適配

摘自郭神的文章:

從Android 8.0系統(tǒng)開(kāi)始官研,Google引入了通知渠道這個(gè)概念秽澳。

什么是通知渠道呢?顧名思義戏羽,就是每條通知都要屬于一個(gè)對(duì)應(yīng)的渠道担神。每個(gè)App都可以自由地創(chuàng)建當(dāng)前App擁有哪些通知渠道,但是這些通知渠道的控制權(quán)都是掌握在用戶手上的始花。用戶可以自由地選擇這些通知渠道的重要程度妄讯,是否響鈴、是否振動(dòng)酷宵、或者是否要關(guān)閉這個(gè)渠道的通知亥贸。

擁有了這些控制權(quán)之后,用戶就再也不用害怕那些垃圾推送消息的打擾了浇垦,因?yàn)橛脩艨梢宰灾鞯剡x擇自己關(guān)心哪些通知炕置、不關(guān)心哪些通知。舉個(gè)具體的例子男韧,我希望可以即時(shí)收到支付寶的收款信息讹俊,因?yàn)槲也幌脲e(cuò)過(guò)任何一筆收益,但是我又不想收到支付寶給我推薦的周?chē)朗郴褪悖驗(yàn)槲覜](méi)錢(qián)只吃得起公司食堂仍劈。這種情況,支付寶就可以創(chuàng)建兩種通知渠道寡壮,一個(gè)收支贩疙,一個(gè)推薦,而我作為用戶對(duì)推薦類(lèi)的通知不感興趣况既,那么我就可以直接將推薦通知渠道關(guān)閉这溅,這樣既不影響我關(guān)心的通知,又不會(huì)讓那些我不關(guān)心的通知來(lái)打擾我了棒仍。

對(duì)于每個(gè)App來(lái)說(shuō)悲靴,通知渠道的劃分是非常需要仔細(xì)考究的,因?yàn)橥ㄖ酪坏﹦?chuàng)建之后就不能再修改了莫其,因此開(kāi)發(fā)者需要仔細(xì)分析自己的App一共有哪些類(lèi)型的通知癞尚,然后再去創(chuàng)建相應(yīng)的通知渠道耸三。這里我們來(lái)參考一下Twitter的通知渠道劃分:

可以看到,Twitter就是根據(jù)自己的通知類(lèi)型浇揩,對(duì)通知渠道進(jìn)行了非常詳細(xì)的劃分仪壮,這樣用戶的自主選擇性就比較高了,也就大大降低了用戶不堪其垃圾通知的騷擾而將App卸載的概率胳徽。


? ?創(chuàng)建通知渠道?

首先我們使用Android Studio來(lái)新建一個(gè)項(xiàng)目积锅,就叫它NotificationTest吧。

創(chuàng)建好項(xiàng)目之后养盗,打開(kāi)app/build.gradle文件檢查一下缚陷,確保targetSdkVersion已經(jīng)指定到了26或者更高,如下所示:

applyplugin:'com.android.application'

android {

compileSdkVersion26

defaultConfig {

applicationId"com.example.notificationtest"

minSdkVersion15

targetSdkVersion26

versionCode1

versionName"1.0"

testInstrumentationRunner"android.support.test.runner.AndroidJUnitRunner"

}

}

可以看到往核,這里我在創(chuàng)建新項(xiàng)目的時(shí)候默認(rèn)targetSdkVersion就是26箫爷,如果你是低于26的話,說(shuō)明你的Android SDK有些老了铆铆,最好還是更新一下。當(dāng)然如果你懶得更新也沒(méi)關(guān)系丹喻,手動(dòng)把它改成26就可以了薄货。

接下來(lái)修改MainActivity中的代碼,如下所示:

publicclassMainActivityextendsAppCompatActivity{

@Override

protectedvoidonCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

String channelId ="chat";

String channelName ="聊天消息";

intimportance = NotificationManager.IMPORTANCE_HIGH;

createNotificationChannel(channelId, channelName, importance);

channelId ="subscribe";

channelName ="訂閱消息";

importance = NotificationManager.IMPORTANCE_DEFAULT;

createNotificationChannel(channelId, channelName, importance);

}

}

@TargetApi(Build.VERSION_CODES.O)

privatevoidcreateNotificationChannel(String channelId, String channelName,intimportance){

NotificationChannel channel =newNotificationChannel(channelId, channelName, importance);

NotificationManager notificationManager = (NotificationManager) getSystemService(

NOTIFICATION_SERVICE);

notificationManager.createNotificationChannel(channel);

}

}

代碼不長(zhǎng)碍论,我來(lái)簡(jiǎn)單解釋下谅猾。這里我們?cè)贛ainActivity中創(chuàng)建了兩個(gè)通知渠道,首先要確保的是當(dāng)前手機(jī)的系統(tǒng)版本必須是Android 8.0系統(tǒng)或者更高鳍悠,因?yàn)榈桶姹镜氖謾C(jī)系統(tǒng)并沒(méi)有通知渠道這個(gè)功能税娜,不做系統(tǒng)版本檢查的話會(huì)在低版本手機(jī)上造成崩潰。

創(chuàng)建一個(gè)通知渠道的方式非常簡(jiǎn)單藏研,這里我封裝了一個(gè)createNotificationChannel()方法敬矩,里面的邏輯相信大家都看得懂。需要注意的是蠢挡,創(chuàng)建一個(gè)通知渠道至少需要渠道ID弧岳、渠道名稱(chēng)以及重要等級(jí)這三個(gè)參數(shù),其中渠道ID可以隨便定義业踏,只要保證全局唯一性就可以禽炬。渠道名稱(chēng)是給用戶看的,需要能夠表達(dá)清楚這個(gè)渠道的用途勤家。重要等級(jí)的不同則會(huì)決定通知的不同行為腹尖,當(dāng)然這里只是初始狀態(tài)下的重要等級(jí),用戶可以隨時(shí)手動(dòng)更改某個(gè)渠道的重要等級(jí)伐脖,App是無(wú)法干預(yù)的热幔。

上述代碼我是模擬了這樣一個(gè)場(chǎng)景乐设。想象一下我們正在開(kāi)發(fā)一個(gè)類(lèi)似于微信的App,其中App通知主要可以分為兩類(lèi)断凶,一類(lèi)是我和別人的聊天消息伤提,這類(lèi)消息非常重要,因此重要等級(jí)我設(shè)為了IMPORTANCE_HIGH认烁。另一類(lèi)是公眾號(hào)的訂閱消息肿男,這類(lèi)消息不是那么重要,因此重要等級(jí)我設(shè)為了IMPORTANCE_DEFAULT却嗡。除此之外舶沛,重要等級(jí)還可以設(shè)置為IMPORTANCE_LOW、IMPORTANCE_MIN窗价,分別對(duì)應(yīng)了更低的通知重要程度如庭。

現(xiàn)在就可以運(yùn)行一下代碼了,運(yùn)行成功之后我們關(guān)閉App撼港,進(jìn)入到設(shè)置 -> 應(yīng)用 -> 通知當(dāng)中坪它,查看NotificationTest這個(gè)App的通知界面,如下圖所示:


剛才我們創(chuàng)建的兩個(gè)通知渠道這里已經(jīng)顯示出來(lái)了帝牡⊥保可以看到,由于這兩個(gè)通知渠道的重要等級(jí)不同靶溜,通知的行為也是不同的开瞭,聊天消息可以發(fā)出提示音并在屏幕上彈出通知,而訂閱消息只能發(fā)出提示音罩息。

當(dāng)然嗤详,用戶還可以點(diǎn)擊進(jìn)去對(duì)該通知渠道進(jìn)行任意的修改,比如降低聊天消息的重要等級(jí)瓷炮,甚至是可以完全關(guān)閉該渠道的通知葱色。

至于創(chuàng)建通知渠道的這部分代碼,你可以寫(xiě)在MainActivity中娘香,也可以寫(xiě)在Application中冬筒,實(shí)際上可以寫(xiě)在程序的任何位置,只需要保證在通知彈出之前調(diào)用就可以了茅主。并且創(chuàng)建通知渠道的代碼只在第一次執(zhí)行的時(shí)候才會(huì)創(chuàng)建舞痰,以后每次執(zhí)行創(chuàng)建代碼系統(tǒng)會(huì)檢測(cè)到該通知渠道已經(jīng)存在了,因此不會(huì)重復(fù)創(chuàng)建诀姚,也并不會(huì)影響任何效率响牛。

————————————————————? ? ? ?讓通知顯示出來(lái)? ? ? ?——————————————————————

觸發(fā)通知的代碼和之前版本基本是沒(méi)有任何區(qū)別的,只是在構(gòu)建通知對(duì)象的時(shí)候,需要多傳入一個(gè)通知渠道ID呀打,表示這條通知是屬于哪個(gè)渠道的矢赁。

那么下面我們就來(lái)讓通知顯示出來(lái)。

首先修改activity_main.xml中的代碼贬丛,如下所示:

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="發(fā)送聊天消息"

android:onClick="sendChatMsg"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="發(fā)送訂閱消息"

android:onClick="sendSubscribeMsg"

/>

這里我們?cè)诓季治募屑尤肓藘蓚€(gè)按鈕撩银,很顯然,一個(gè)是用于觸發(fā)聊天消息渠道通知的豺憔,一個(gè)是用于觸發(fā)訂閱消息渠道通知的额获。

接下來(lái)修改MainActivity中的代碼,如下所示:

publicclassMainActivityextendsAppCompatActivity{

...

publicvoidsendChatMsg(View view){

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Notification notification =newNotificationCompat.Builder(this,"chat")

.setContentTitle("收到一條聊天消息")

.setContentText("今天中午吃什么恭应?")

.setWhen(System.currentTimeMillis())

.setSmallIcon(R.drawable.icon)

.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon))

.setAutoCancel(true)

.build();

manager.notify(1, notification);

}

publicvoidsendSubscribeMsg(View view){

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Notification notification =newNotificationCompat.Builder(this,"subscribe")

.setContentTitle("收到一條訂閱消息")

.setContentText("地鐵沿線30萬(wàn)商鋪搶購(gòu)中抄邀!")

.setWhen(System.currentTimeMillis())

.setSmallIcon(R.drawable.icon)

.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon))

.setAutoCancel(true)

.build();

manager.notify(2, notification);

}

}

這里我們分別在sendChatMsg()和sendSubscribeMsg()方法中觸發(fā)了兩條通知,創(chuàng)建通知的代碼就不再多做解釋了昼榛,和傳統(tǒng)創(chuàng)建通知的方法沒(méi)什么兩樣境肾,只是在NotificationCompat.Builder中需要多傳入一個(gè)通知渠道ID,那么這里我們分別傳入了chat和subscribe這兩個(gè)剛剛創(chuàng)建的渠道ID胆屿。

現(xiàn)在重新運(yùn)行一下代碼奥喻,并點(diǎn)擊發(fā)送聊天消息按鈕,效果如下圖所示:


由于這是一條重要等級(jí)高的通知非迹,因此會(huì)使用這種屏幕彈窗的方式來(lái)通知用戶有消息到來(lái)环鲤。然后我們可以下拉展開(kāi)通知欄,這里也能查看到通知的詳細(xì)信息:


用戶可以通過(guò)快速向左或者向右滑動(dòng)來(lái)關(guān)閉這條通知彻秆。

接下來(lái)點(diǎn)擊發(fā)送訂閱消息按鈕楔绞,你會(huì)發(fā)現(xiàn)現(xiàn)在屏幕上不會(huì)彈出一條通知提醒了结闸,只會(huì)在狀態(tài)欄上顯示一個(gè)小小的通知圖標(biāo):


因?yàn)橛嗛喯⑼ㄖ闹匾燃?jí)是默認(rèn)級(jí)別唇兑,這就是默認(rèn)級(jí)別通知的展示形式。當(dāng)然我們還是可以下拉展開(kāi)通知欄桦锄,查看通知的詳細(xì)信息:


不過(guò)上面演示的都是通知欄的傳統(tǒng)功能扎附,接下來(lái)我們看一看Android 8.0系統(tǒng)中通知欄特有的功能。

剛才提到了结耀,快速向左或者向右滑動(dòng)可以關(guān)閉一條通知留夜,但如果你緩慢地向左或者向右滑動(dòng),就會(huì)看到這樣兩個(gè)按鈕:


其中图甜,左邊那個(gè)時(shí)鐘圖標(biāo)的按鈕可以讓通知延遲顯示碍粥。比方說(shuō)這是一條比較重要的通知,但是我暫時(shí)沒(méi)時(shí)間看黑毅,也不想讓它一直顯示在狀態(tài)欄里打擾我嚼摩,我就可以讓它延遲一段后時(shí)間再顯示,這樣我就暫時(shí)能夠先將精力放在專(zhuān)注的事情上,等過(guò)會(huì)有時(shí)間了這條通知會(huì)再次顯示出來(lái)枕面,我不會(huì)錯(cuò)過(guò)任何信息愿卒。如下所示:


而右邊那個(gè)設(shè)置圖標(biāo)的按鈕就可以用來(lái)對(duì)通知渠道進(jìn)行屏蔽和配置了,用戶對(duì)每一個(gè)App的每一個(gè)通知渠道都有絕對(duì)的控制權(quán)潮秘,可以根據(jù)自身的喜好來(lái)進(jìn)行配置和修改琼开。如下所示:


比如說(shuō)我覺(jué)得訂閱消息老是向我推薦廣告,實(shí)在是太煩了枕荞,我就可以將訂閱消息的通知渠道關(guān)閉掉柜候。這樣我以后就不會(huì)再收到這個(gè)通知渠道下的任何消息,而聊天消息卻不會(huì)受到影響买猖,這就是8.0系統(tǒng)通知渠道最大的特色改橘。

另外,點(diǎn)擊上圖中的所有類(lèi)別就可以進(jìn)入到當(dāng)前應(yīng)用程序通知的完整設(shè)置界面玉控。

——————————————————————? ? ? ?管理通知渠道? ? ? ?——————————————————————————

在前面的內(nèi)容中我們已經(jīng)了解到飞主,通知渠道一旦創(chuàng)建之后就不能再通過(guò)代碼修改了。既然不能修改的話那還怎么管理呢高诺?為此碌识,Android賦予了開(kāi)發(fā)者讀取通知渠道配置的權(quán)限,如果我們的某個(gè)功能是必須按照指定要求來(lái)配置通知渠道才能使用的虱而,那么就可以提示用戶去手動(dòng)更改通知渠道配置筏餐。

只講概念總是不容易理解,我們還是通過(guò)具體的例子來(lái)學(xué)習(xí)一下牡拇。想一想我們開(kāi)發(fā)的是一個(gè)類(lèi)似于微信的App魁瞪,聊天消息是至關(guān)重要的,如果用戶不小心將聊天消息的通知渠道給關(guān)閉了惠呼,那豈不是所有重要的信息全部都丟了导俘?為此我們一定要保證用戶打開(kāi)了聊天消息的通知渠道才行。

修改MainActivity中的代碼剔蹋,如下所示:

publicclassMainActivityextendsAppCompatActivity{

...

publicvoidsendChatMsg(View view){

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

NotificationChannel channel = manager.getNotificationChannel("chat");

if(channel.getImportance() == NotificationManager.IMPORTANCE_NONE) {

Intent intent =newIntent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);

intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());

intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel.getId());

startActivity(intent);

Toast.makeText(this,"請(qǐng)手動(dòng)將通知打開(kāi)", Toast.LENGTH_SHORT).show();

}

}

Notification notification =newNotificationCompat.Builder(this,"chat")

...

.build();

manager.notify(1, notification);

}

...

}

這里我們對(duì)sendChatMsg()方法進(jìn)行了修改旅薄,通過(guò)getNotificationChannel()方法獲取到了NotificationChannel對(duì)象,然后就可以讀取該通知渠道下的所有配置了泣崩。這里我們判斷如果通知渠道的importance等于IMPORTANCE_NONE少梁,就說(shuō)明用戶將該渠道的通知給關(guān)閉了,這時(shí)會(huì)跳轉(zhuǎn)到通知的設(shè)置界面提醒用戶手動(dòng)打開(kāi)矫付。

現(xiàn)在重新運(yùn)行一下程序凯沪,效果如下圖所示:


可以看到,當(dāng)我們將聊天消息的通知渠道關(guān)閉后买优,下次再次發(fā)送聊天消息將會(huì)直接跳轉(zhuǎn)到通知設(shè)置界面妨马,提醒用戶手動(dòng)將通知打開(kāi)樟遣。

除了以上管理通知渠道的方式之外,Android 8.0還賦予了我們刪除通知渠道的功能身笤,只需使用如下代碼即可刪除:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

manager.deleteNotificationChannel(channelId);

但是這個(gè)功能非常不建議大家使用豹悬。因?yàn)镚oogle為了防止應(yīng)用程序隨意地創(chuàng)建垃圾通知渠道,會(huì)在通知設(shè)置界面顯示所有被刪除的通知渠道數(shù)量液荸,如下圖所示:


這樣是非常不美觀的瞻佛,所以對(duì)于開(kāi)發(fā)者來(lái)說(shuō)最好的做法就是仔細(xì)規(guī)劃好通知渠道,而不要輕易地使用刪除功能娇钱。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 顯示未讀角標(biāo)

前面我們提到過(guò)伤柄,蘋(píng)果是從iOS 5開(kāi)始才引入了通知欄功能,那么在iOS 5之前文搂,iPhone都是怎么進(jìn)行消息通知的呢适刀?使用的就是未讀角標(biāo)功能,效果如下所示:


實(shí)際上Android系統(tǒng)之前是從未提供過(guò)這種類(lèi)似于iOS的角標(biāo)功能的煤蹭,但是由于很多國(guó)產(chǎn)手機(jī)廠商都喜歡跟風(fēng)iOS笔喉,因此各種國(guó)產(chǎn)手機(jī)ROM都紛紛推出了自己的角標(biāo)功能。

可是國(guó)產(chǎn)手機(jī)廠商雖然可以訂制ROM硝皂,但是卻沒(méi)有制定API的能力常挚,因此長(zhǎng)期以來(lái)都沒(méi)有一個(gè)標(biāo)準(zhǔn)的API來(lái)實(shí)現(xiàn)角標(biāo)功能,很多都是要通過(guò)向系統(tǒng)發(fā)送廣播來(lái)實(shí)現(xiàn)的稽物,而各個(gè)手機(jī)廠商的廣播標(biāo)準(zhǔn)又不一致奄毡,經(jīng)常導(dǎo)致代碼變得極其混雜。

值得高興的是贝或,從8.0系統(tǒng)開(kāi)始吼过,Google制定了Android系統(tǒng)上的角標(biāo)規(guī)范,也提供了標(biāo)準(zhǔn)的API咪奖,長(zhǎng)期讓開(kāi)發(fā)者頭疼的這個(gè)問(wèn)題現(xiàn)在終于可以得到解決了盗忱。

那么下面我們就來(lái)學(xué)習(xí)一下如何在Android系統(tǒng)上實(shí)現(xiàn)未讀角標(biāo)的效果。修改MainActivity中的代碼赡艰,如下所示:

publicclassMainActivityextendsAppCompatActivity{

...

@TargetApi(Build.VERSION_CODES.O)

privatevoidcreateNotificationChannel(String channelId, String channelName,intimportance){

NotificationChannel channel =newNotificationChannel(channelId, channelName, importance);

channel.setShowBadge(true);

NotificationManager notificationManager = (NotificationManager) getSystemService(

NOTIFICATION_SERVICE);

notificationManager.createNotificationChannel(channel);

}

publicvoidsendSubscribeMsg(View view){

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

Notification notification =newNotificationCompat.Builder(this,"subscribe")

...

.setNumber(2)

.build();

manager.notify(2, notification);

}

}

可以看到售淡,這里我們主要修改了兩個(gè)地方斤葱。第一是在創(chuàng)建通知渠道的時(shí)候慷垮,調(diào)用了NotificationChannel的setShowBadge(true)方法,表示允許這個(gè)渠道下的通知顯示角標(biāo)揍堕。第二是在創(chuàng)建通知的時(shí)候料身,調(diào)用了setNumber()方法,并傳入未讀消息的數(shù)量衩茸。

現(xiàn)在重新運(yùn)行一下程序芹血,并點(diǎn)擊發(fā)送訂閱消息按鈕,然后在Launcher中找到NotificationTest這個(gè)應(yīng)用程序,如下圖所示:


可以看到幔烛,在圖標(biāo)的右上角有個(gè)綠色的角標(biāo)啃擦,說(shuō)明我們編寫(xiě)的角標(biāo)功能已經(jīng)生效了。

需要注意的是饿悬,即使我們不調(diào)用setShowBadge(true)方法令蛉,Android系統(tǒng)默認(rèn)也是會(huì)顯示角標(biāo)的,但是如果你想禁用角標(biāo)功能狡恬,那么記得一定要調(diào)用setShowBadge(false)方法珠叔。

但是未讀數(shù)量怎么沒(méi)有顯示出來(lái)呢?這個(gè)功能還需要我們對(duì)著圖標(biāo)進(jìn)行長(zhǎng)按才行弟劲,效果如下圖所示:


這樣就能看到通知的未讀數(shù)量是2了祷安。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市兔乞,隨后出現(xiàn)的幾起案子汇鞭,更是在濱河造成了極大的恐慌,老刑警劉巖庸追,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虱咧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡锚国,警方通過(guò)查閱死者的電腦和手機(jī)腕巡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)血筑,“玉大人绘沉,你說(shuō)我怎么就攤上這事〔蜃埽” “怎么了车伞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喻喳。 經(jīng)常有香客問(wèn)我另玖,道長(zhǎng),這世上最難降的妖魔是什么表伦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任谦去,我火速辦了婚禮,結(jié)果婚禮上蹦哼,老公的妹妹穿的比我還像新娘鳄哭。我一直安慰自己,他們只是感情好纲熏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布妆丘。 她就那樣靜靜地躺著锄俄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勺拣。 梳的紋絲不亂的頭發(fā)上奶赠,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音药有,去河邊找鬼漆枚。 笑死呻袭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彰导,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼习寸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寂曹!你這毒婦竟也來(lái)了爱态?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜡励,失蹤者是張志新(化名)和其女友劉穎令花,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體凉倚,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兼都,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稽寒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扮碧。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖杏糙,靈堂內(nèi)的尸體忽然破棺而出慎王,到底是詐尸還是另有隱情,我是刑警寧澤宏侍,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布赖淤,位于F島的核電站,受9級(jí)特大地震影響谅河,放射性物質(zhì)發(fā)生泄漏咱旱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一绷耍、第九天 我趴在偏房一處隱蔽的房頂上張望吐限。 院中可真熱鬧,春花似錦锨天、人聲如沸毯盈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搂赋。三九已至,卻和暖如春益缠,著一層夾襖步出監(jiān)牢的瞬間脑奠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工幅慌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宋欺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓胰伍,卻偏偏與公主長(zhǎng)得像齿诞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骂租,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • 一祷杈,直觀來(lái)看 android-o上對(duì)通知做了更細(xì)粒度的管理。根據(jù)app的業(yè)務(wù)場(chǎng)景將通知分類(lèi)渗饮。用戶可以在設(shè)置中選擇接...
    笑羋閱讀 4,472評(píng)論 0 2
  • 今天假期返程但汞,兒子回深圳,我們倆回家互站,到達(dá)時(shí)間都是下午四點(diǎn)私蕾,孩子全程的安排很是用心,能感覺(jué)到他真地是長(zhǎng)大了胡桃。 回來(lái)...
    卜芳閱讀 219評(píng)論 2 6
  • 愛(ài)情踩叭,這種東西……是否有一個(gè)期限?我是說(shuō),愛(ài)情什么時(shí)候才會(huì)到來(lái)?什么時(shí)候才是結(jié)束? 愛(ài)情來(lái)的沒(méi)有一點(diǎn)點(diǎn)防備翠胰,一點(diǎn)點(diǎn)...
    落葉之上閱讀 434評(píng)論 0 0
  • 二人在預(yù)定的餐廳吃了飯懊纳,顧清流拉過(guò)她的手,對(duì)她說(shuō)亡容,我們出去走走嗤疯。環(huán)境幽雅的餐廳后面竟有一個(gè)小荷花池,荷花滿池闺兢,柳樹(shù)...
    蘇淺年閱讀 406評(píng)論 0 1