在BroadcastReceiver中利用推送設(shè)置全局彈窗,并將消息保存至本地

描述:
1蕾盯、在app中收到推送幕屹,自動(dòng)彈出窗口,顯示推送內(nèi)容级遭。
2望拖、選擇是否保存消息,是>存到消息列表數(shù)據(jù)庫(kù)挫鸽。否>dimiss说敏。

用到的庫(kù):
1、極光推送JPush
2丢郊、GreenDao數(shù)據(jù)庫(kù)

相關(guān)閱讀:

Android利用極光推送獲取到消息并緩存至本地
關(guān)于JPush極光推送的基本用法和通知介紹
GreenDao+SearchView+FlowLoyout實(shí)現(xiàn)搜索歷史和熱門搜索

為了區(qū)別手動(dòng)保存的和自動(dòng)保存的在時(shí)間前面加了“手動(dòng)”盔沫。

在收到推送之后會(huì)在兩個(gè)地方保存医咨,一個(gè)是對(duì)話窗口,一個(gè)是在Service
這里的彈窗并不是dialog架诞,因?yàn)橐獜棾鰀ialog需要依附存在的活動(dòng)拟淮。
在網(wǎng)上搜了一堆也沒(méi)能找到合適的辦法。

這里的用的彈窗其實(shí)是基于activity寫(xiě)的谴忧,當(dāng)然也可以在收到消息后很泊,進(jìn)入到一個(gè)新的activity,然后判斷推送設(shè)置是否彈窗口沾谓。

 @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_jpush_message);
        ButterKnife.bind(this);
        initDbHelp();
        initView();
    }

布局就是要顯示的對(duì)話框撑蚌。
這里就不寫(xiě)源碼了。需要的可以去Github查看

初始化數(shù)據(jù)庫(kù)的方法:
有三個(gè)地方需要初始化搏屑,一個(gè)是自定義的MyService争涌、一個(gè)是收到消息的彈窗頁(yè)面,還有一個(gè)是消息列表辣恋。

對(duì)數(shù)據(jù)庫(kù)的操作只需要調(diào)用messageDao的相關(guān)增亮垫、刪、改伟骨、查方法饮潦。

  /*初始化數(shù)據(jù)庫(kù)相關(guān)*/
    private void initDbHelp() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(BaseApplication.mBaseApplication, "recluse-db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        DaoSession daoSession = daoMaster.newSession();
        messageDao = daoSession.getMessageDao();
    }

推送用的是極光,在收到推送消息后携狭,首先在Receiver中處理继蜡,可以直接保存,
并且自動(dòng)打開(kāi)一個(gè)窗口逛腿,再選擇是否手動(dòng)保存稀并。
為了區(qū)別消息,放了一個(gè)日期单默,一并存入數(shù)據(jù)庫(kù)

else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下來(lái)的通知:" + bundle.getString(JPushInterface.EXTRA_ALERT));
            String content = bundle.getString(JPushInterface.EXTRA_ALERT);
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss");
            Date curDate = new Date(System.currentTimeMillis());
            //獲取當(dāng)前時(shí)間
            String str = formatter.format(curDate);
            //自動(dòng)保存至數(shù)據(jù)庫(kù)
            messageDao.insert(new Message(null, str, content));
            //打開(kāi)數(shù)據(jù)庫(kù)彈窗碘举,手動(dòng)選擇是否保存
            Intent intent1 = new Intent(context, JPushDialogActivity.class);
            intent1.putExtra("MESSAGE", content);
            context.startActivity(intent1);

在彈出的窗口顯示消息內(nèi)容,并且可以手動(dòng)選擇是否保存搁廓,


image.png
    private void initView() {
        if (getIntent().hasExtra("MESSAGE"))
        message = getIntent().getStringExtra("MESSAGE");
        dialogMessage.setText("收到的推送:"+message);
    }

最后監(jiān)聽(tīng)彈窗按鈕:
如果選擇了保存按鈕引颈,則緩存到本地?cái)?shù)據(jù)庫(kù),并且跳轉(zhuǎn)到消息列表

case R.id.dialog_yes:
                Intent intent = new Intent(this, MessageActivity.class);
                SimpleDateFormat formatter   =   new   SimpleDateFormat   ("yyyy年MM月dd日   HH:mm:ss");
                Date curDate =  new Date(System.currentTimeMillis());
                //獲取當(dāng)前時(shí)間
                String   str   =   formatter.format(curDate);
                messageDao.insert(new Message(null, "手動(dòng):" + str, message));
                startActivity(intent);
                break;

最后在消息列表中查詢所有的消息境蜕,添加到listview展示出來(lái)

image.png
  private void initview() {
        //查詢所有
        list = messageDao.queryBuilder().list();
        //list倒序排列
        Collections.reverse(list);
        adapter = new ItemTVAdapter(context, list);
        messageLv.setAdapter(adapter);
        adapter.notifyDataSetChanged();

    }

需要注意的地方:
1蝙场、數(shù)據(jù)庫(kù)的實(shí)例化,在什么地方需要操作就在什么地方實(shí)例化粱年。有個(gè)缺點(diǎn)是每次都要重復(fù)的復(fù)制過(guò)去售滤,后續(xù)會(huì)解決下這個(gè)問(wèn)題。
2逼泣、能正常推送的情況是必須保持app后臺(tái)運(yùn)行趴泌,并且在應(yīng)用管理開(kāi)啟了推送的開(kāi)關(guān)舟舒,才能收到推送。彈窗的話是應(yīng)用必須在前臺(tái)嗜憔,可見(jiàn)狀態(tài)才會(huì)彈窗秃励。
如果活動(dòng)被清理掉是收不到推送的。

而且這里的推送是我手動(dòng)在極光后臺(tái)操作的吉捶,需要測(cè)試的話可以自己去極光申請(qǐng)自己的項(xiàng)目夺鲜。


源碼地址:https://github.com/wapchief/android-CollectionDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市呐舔,隨后出現(xiàn)的幾起案子币励,更是在濱河造成了極大的恐慌,老刑警劉巖珊拼,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件食呻,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡澎现,警方通過(guò)查閱死者的電腦和手機(jī)仅胞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)剑辫,“玉大人干旧,你說(shuō)我怎么就攤上這事∶帽危” “怎么了椎眯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胳岂。 經(jīng)常有香客問(wèn)我编整,道長(zhǎng),這世上最難降的妖魔是什么旦万? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任闹击,我火速辦了婚禮,結(jié)果婚禮上成艘,老公的妹妹穿的比我還像新娘。我一直安慰自己贺归,他們只是感情好淆两,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拂酣,像睡著了一般秋冰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婶熬,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天剑勾,我揣著相機(jī)與錄音埃撵,去河邊找鬼。 笑死虽另,一個(gè)胖子當(dāng)著我的面吹牛暂刘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捂刺,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谣拣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了族展?” 一聲冷哼從身側(cè)響起森缠,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仪缸,沒(méi)想到半個(gè)月后贵涵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恰画,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年独悴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锣尉。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刻炒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出自沧,到底是詐尸還是另有隱情坟奥,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布拇厢,位于F島的核電站爱谁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏孝偎。R本人自食惡果不足惜访敌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衣盾。 院中可真熱鬧寺旺,春花似錦、人聲如沸势决。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)果复。三九已至陈莽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背走搁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工独柑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人私植。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓忌栅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親兵琳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狂秘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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