Android O 8.0及其以上系統(tǒng)的通知(Notification)利术、安裝apk問題更新后的簡單兼容寫法

最近時間在做Android8.0及其以上系統(tǒng)下App版本更新時碧磅,使用Android 8.0的手機測試發(fā)現(xiàn)兩個問題:

1.彈出通知欄沒有展示旗闽,Toast:Developer warning for package “xxx.xxx.xxx” Failed to post notification on channel “null” See log for more details

2.新安裝包下載完成之后,沒有自動跳轉(zhuǎn)到安裝界面蜡塌,使用8.0以下的手機并沒有這個問題碉纳。

針對問題1:

查閱官方文檔得知,NotificationChannel是android8.0新增的特性馏艾,如果App的targetSDKVersion>=26劳曹,沒有設(shè)置channel通知渠道的話,就會導致通知無法展示琅摩。

Android O 引入了 通知渠道(Notification Channels)铁孵,以提供統(tǒng)一的系統(tǒng)來幫助用戶管理通知,如果是針對 android O 為目標平臺時房资,必須實現(xiàn)一個或者多個通知渠道蜕劝,以向用戶顯示通知。比如聊天軟件轰异,為每個聊天組設(shè)置一個通知渠道岖沛,指定特定聲音、燈光等配置溉浙。

因此解決方案是給通知設(shè)置渠道 createNotification(). 具體設(shè)置渠道的代碼如下:

final NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
RemoteViews view = new RemoteViews(getPackageName(), R.layout.notift_item);
//適配安卓8.0的消息渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
      /**
       * Oreo不用Priority了烫止,用importance
       * IMPORTANCE_NONE 關(guān)閉通知
       * IMPORTANCE_MIN 開啟通知,不會彈出戳稽,但沒有提示音馆蠕,狀態(tài)欄中無顯示
       * IMPORTANCE_LOW 開啟通知,不會彈出惊奇,不發(fā)出提示音互躬,狀態(tài)欄中顯示
       * IMPORTANCE_DEFAULT 開啟通知,不會彈出颂郎,發(fā)出提示音吼渡,狀態(tài)欄中顯示
       * IMPORTANCE_HIGH 開啟通知,會彈出乓序,發(fā)出提示音寺酪,狀態(tài)欄中顯示
       */
      NotificationChannel channel = new NotificationChannel(channelID, channelName, NotificationManager.IMPORTANCE_LOW);
      manager.createNotificationChannel(channel);
    }
notification = new NotificationCompat.Builder(this).setContent(view)
.setTicker("正在下載") //通知首次出現(xiàn)在通知欄坎背,帶上升動畫效果的
.setOngoing(true)//設(shè)置他為一個正在進行的通知。他們通常是用來表示一個后臺任務,用戶積極參與(如播放音樂) 或以某種方式正在等待,因此占用設(shè)備(如一個文件下載,同步操作,主動網(wǎng)絡(luò)連接)
.setSmallIcon(R.mipmap.jycicon)//設(shè)置通知小ICON
.setContentTitle("下載中")//設(shè)置通知欄標題
.setContentText("正在下載請稍等")//設(shè)置通知欄顯示內(nèi)容
.setContentIntent(getDefalutIntent(Notification.FLAG_AUTO_CANCEL))//設(shè)置通知欄點擊意圖
.setChannelId(channelID)
.build();

此時寄雀,推送通知得滤,不再有上面的錯誤提示,同時可以看到頂部有通知正常彈出盒犹。

上面代碼是針對android8.0懂更,因此還要在重寫的方法上面加上@RequiresApi(api =26)
針對問題2:
Android 8.0 Oreo 中急膀,Google 移除掉了容易被濫用的“允許位置來源”應用的開關(guān)沮协,在安裝 Play Store 之外的第三方來源的 Android 應用的時候,已經(jīng)沒有了“允許未知來源”的檢查框卓嫂,其實并不是沒有這個檢查框了慷暂,只是放在了apk安裝的界面,如果你還是想要安裝某個被自己所信任的開發(fā)者的 app晨雳,則需要在清單文件AndroidManifest中加上如下權(quán)限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

然后再Android上8.0的機器上運行呜呐,發(fā)現(xiàn)新的apk下載完成后可以自動跳到安裝界面,這時“允許安裝未知來源”的檢查框出現(xiàn)了悍募。點擊允許apk就可以順利安裝了蘑辑。

這時你是否會想就加一個權(quán)限就可以了,so easy坠宴!我們可以做如下操作讓我們的App更加完美洋魂。

/** * 判斷是否是8.0,8.0需要處理未知應用來源權(quán)限問題,否則直接安裝 */ 
        private void checkIsAndroidO() { 
               if (Build.VERSION.SDK_INT >= 26) { 
                             boolean b = getPackageManager().canRequestPackageInstalls(); 
                             if (b) { 
                                 installApk();//安裝應用的邏輯(寫自己的就可以) 
                                 } else { 
                                          //請求安裝未知應用來源的權(quán)限 
                                         ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_PACKAGES_REQUESTCODE);} 
                    } else { 
                            installApk(); 
                        } 
           } 

以上代碼可以放在首次進入app時申請動態(tài)權(quán)限。

首次進行版本更新時喜鼓,我們得到的應該是false副砍,因為系統(tǒng)默認并沒有允許該權(quán)限。我們可以請求該權(quán)限庄岖,在權(quán)限請求結(jié)果的回調(diào)中處理邏輯如下:

@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
switch (requestCode) {   
case INSTALL_PACKAGES_REQUESTCODE:     
if (grantResults.length > 0 && grantResults[0]==                             PackageManager.PERMISSION_GRANTED) {
       installApk();
    } else {
        Intent localIntent = new Intent();
        localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        if (Build.VERSION.SDK_INT >= 9) {//2.3
          localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
          localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
        } else if (Build.VERSION.SDK_INT <= 8) {//2.2
          localIntent.setAction(Intent.ACTION_VIEW);
         localIntent.setClassName("com.android.settings","com.android.settings.InstalledAppDetails");
          localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
        }
        context.startActivity(localIntent);
      }
      break;
  }
}

若是沒有獲得該權(quán)限豁翎,我們可以使用else里的操作將用戶引導至應用信息界面,設(shè)置權(quán)限隅忿、允許安裝未知來源心剥,如圖

image

?
image

做了如上操作后,用戶下次版本更新的時候背桐,已經(jīng)允許了未知來源的應用优烧,就可以直接安裝了,無需用戶再手動授權(quán)允許链峭!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畦娄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熙卡,老刑警劉巖杖刷,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驳癌,居然都是意外死亡挺勿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門喂柒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人禾嫉,你說我怎么就攤上這事灾杰。” “怎么了熙参?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵艳吠,是天一觀的道長。 經(jīng)常有香客問我孽椰,道長昭娩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任黍匾,我火速辦了婚禮栏渺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锐涯。我一直安慰自己磕诊,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布纹腌。 她就那樣靜靜地躺著霎终,像睡著了一般。 火紅的嫁衣襯著肌膚如雪升薯。 梳的紋絲不亂的頭發(fā)上莱褒,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天哼转,我揣著相機與錄音蟹倾,去河邊找鬼。 笑死被廓,一個胖子當著我的面吹牛蛛枚,可吹牛的內(nèi)容都是我干的炮障。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼坤候,長吁一口氣:“原來是場噩夢啊……” “哼胁赢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起白筹,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤智末,失蹤者是張志新(化名)和其女友劉穎谅摄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體系馆,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡送漠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了由蘑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闽寡。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尼酿,靈堂內(nèi)的尸體忽然破棺而出爷狈,到底是詐尸還是另有隱情,我是刑警寧澤裳擎,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布涎永,位于F島的核電站,受9級特大地震影響鹿响,放射性物質(zhì)發(fā)生泄漏羡微。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一惶我、第九天 我趴在偏房一處隱蔽的房頂上張望妈倔。 院中可真熱鬧,春花似錦绸贡、人聲如沸启涯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽结洼。三九已至,卻和暖如春叉跛,著一層夾襖步出監(jiān)牢的瞬間松忍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工筷厘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鸣峭,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓酥艳,卻偏偏與公主長得像摊溶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子充石,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

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

  • APK安裝流程系列文章整體內(nèi)容如下: APK安裝流程詳解0——前言APK安裝流程詳解1——有關(guān)"安裝ing"的實體...
    隔壁老李頭閱讀 9,051評論 4 15
  • 一莫换、簡介二、效果預覽?三、實現(xiàn)步驟四拉岁、功能解析五坷剧、Demo地址六、內(nèi)容推薦 一喊暖、簡介 嘿嘿惫企,這周沒缺席,繼續(xù)給大伙...
    斌林誠上閱讀 5,842評論 1 15
  • 最近在做8.0以及P版本的是適配,對安卓的行為變更巩掺,對企業(yè)項目的影響做了簡單的整理 Android 8.0 行為變...
    撒嬌的喵咪閱讀 1,767評論 0 9
  • 突然天陰沉偏序,我不自覺地哼起了小調(diào),哼著哼著有了口腔里的發(fā)音锌半,發(fā)的是什么我并不知道,自然流淌寇漫。流淌到西北流經(jīng)到北方又...
    金金心閱讀 275評論 0 0
  • 中午出去散步刊殉,猛然發(fā)現(xiàn),路邊的梧桐花開了州胳。 這條路從東到西大概有二三十公里记焊,路兩邊種滿了梧桐樹。每年春天梧桐花開的...
    菁菁TJ閱讀 1,352評論 6 50