Android 8.0更新適配和通知欄適配

Android 8.0系統(tǒng)更新之后,app的更新將不再像之前的系統(tǒng)版本一樣能夠直接下載安裝包之后直接安裝(以前安裝未知來源應(yīng)用的時候一般會彈出一個彈窗讓用戶去設(shè)置允許還是拒絕堵未,并且設(shè)置為允許之后,所有的未知來源的應(yīng)用都可以被安裝)院峡,8.0需要用戶給予允許app安裝未知來源應(yīng)用的權(quán)限(比如你的app 名字為A嚎莉,當(dāng)你需要更新時关拒,則需要使用app的用戶 授權(quán)A這個app 允許安裝未知來源的權(quán)限,才能完成正常的更新操作)蝉揍。
Android8.0的變化是链峭,未知應(yīng)用安裝權(quán)限的開關(guān)被除掉,取而代之的是未知來源應(yīng)用的管理列表又沾,需要在里面打開每個應(yīng)用的未知來源的安裝權(quán)限(說實話弊仪,這個權(quán)限要找到還真的不是那么容易,我第一次就找了半天才找到杖刷。励饵。也是尷尬)。Google這么做是為了防止一開始正經(jīng)的應(yīng)用后來開始通過升級來做一些不合法的事情滑燃,侵犯用戶權(quán)益役听。當(dāng)你的應(yīng)用直接適配到Android8之后,內(nèi)部啟動應(yīng)用安裝是會被阻塞的,如果不處理好這個未知來源的權(quán)限典予,會導(dǎo)致應(yīng)用根本無法更新甜滨,只能去應(yīng)用市場重新下載。瘤袖。那么該怎么做這個權(quán)限適配呢?

 首先第一步:我們需要在清單文件中添加一項權(quán)限
 <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> 

有了這個權(quán)限之后衣摩,其實在更新時,當(dāng)更新包下載完成后捂敌,系統(tǒng)會彈出權(quán)限申請的選擇框艾扮,用戶點擊允許的話是可以正常安裝的。
但是我們最好還是在代碼中進(jìn)一步進(jìn)行動態(tài)權(quán)限處理黍匾。
先來判斷當(dāng)前的sdk是否是8.0及以上的版本

boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
  //如果是 則判斷當(dāng)前是否有權(quán)限
  haveInstallPermission = getPackageManager().canRequestPackageInstalls();
  //沒有權(quán)限則進(jìn)行權(quán)限請求
 if (!haveInstallPermission) {
      //請求權(quán)限可以用兩種方法栏渺,選中合適的就好

//  A呛梆。第一種  直接通過意圖 進(jìn)入設(shè)置界面锐涯,讓用戶清晰的知道設(shè)置的位置,手動的打開設(shè)置開關(guān)
  //打開設(shè)置——允許安裝未知來源的應(yīng)用
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void startInstallPermissionSettingActivity() {
        //注意這個是8.0新API
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
        startActivityForResult(intent, 10086);
    }
 使用這種方法則需要在onActivityResult方法中進(jìn)行回調(diào)處理
   @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 10086) {
            installProcess();//再次執(zhí)行安裝流程填物,包含權(quán)限判等
        }
    }

//  B纹腌。第二種  直接進(jìn)行權(quán)限請求
                //請求安裝未知應(yīng)用來源的權(quán)限
//                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 200);

然后在onRequestPermissionsResult處理
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
     //處理邏輯
}   }   }

這樣 更新適配就做好了。

8.0也需要做通知欄的適配滞磺,比如說更新的進(jìn)度條需要顯示在通知欄讓用戶查看升薯,那么在8.0之后的系統(tǒng)就需要進(jìn)行通知欄的適配。

方法如下:

   //如果當(dāng)前系統(tǒng)是8.0以上的击困,則需要使用新的通知創(chuàng)建方法來適配
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void showChannel1Notification(){
        notificationManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        //創(chuàng)建 通知通道  channelid和channelname是必須的(自己命名就好)
        NotificationChannel channel = new NotificationChannel("1",
                "Channel1", NotificationManager.IMPORTANCE_DEFAULT);
        channel.enableLights(true);//是否在桌面icon右上角展示小紅點
        channel.setLightColor(Color.GREEN);//小紅點顏色
        channel.setShowBadge(true); //是否在久按桌面圖標(biāo)時顯示此渠道的通知
        notificationManager.createNotificationChannel(channel);

        int notificationId = 0x1234;
        Notification.Builder builder = new Notification.Builder(context,"1");

//設(shè)置通知顯示圖標(biāo)涎劈、文字等
        builder.setSmallIcon(R.mipmap.ic_launcher)
                .setContentText("正在下載新版本,請稍后...")
                .setAutoCancel(true);
        notification=builder.build();
        notificationManager.notify(notificationId,notification);

//設(shè)置下載進(jìn)度條
        if (view == null) {
            view = new RemoteViews(getPackageName(), R.layout.notification);
            notification.contentView = view;
            notification.contentView.setProgressBar(R.id.progress, 100, 0, false);
        }

//延遲意圖
        PendingIntent contentIntent = PendingIntent.getActivity(this, R.string.app_name, new Intent(),
                PendingIntent.FLAG_UPDATE_CURRENT);
        notification.contentIntent = contentIntent;
        notification.flags |= Notification.FLAG_ONGOING_EVENT;// 滑動或者clear都不會清空
    }

這樣就會在8.0系統(tǒng)上彈出通知了阅茶。當(dāng)然還需要及時的關(guān)閉通知蛛枚,當(dāng)更新進(jìn)度條加載完成或者其他時候

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        //關(guān)閉通知通道
                        notificationManager.deleteNotificationChannel("1");
                    }

及時關(guān)閉。

到此8.0的更新和通知欄適配就完成啦脸哀,如果有什么不對的或者不懂的歡迎留言呦蹦浦!

關(guān)于刷新進(jìn)度條會出現(xiàn)多次聲音的情況,是每次進(jìn)度條刷新時都會發(fā)送一個通知撞蜂,通過這個通知來達(dá)到更新進(jìn)度條進(jìn)度值的目的盲镶,發(fā)通知時就會有通知音。解決這個辦法一個是可以設(shè)置提醒標(biāo)志符Flags蝌诡;實例化通知欄之后通過給他添加.flags屬性賦值溉贿。
notification.flags = Notification.FLAG_ONLY_ALERT_ONCE;這個flags代表發(fā)起Notification后,鈴聲和震動均只執(zhí)行一次浦旱。另一個方法是@喝風(fēng)娃在上方評論中提及到的setOnlyAlertOnce設(shè)置其為true宇色,大家可以這么來解決,后續(xù)要是發(fā)現(xiàn)啥問題,希望大家來評論席多反饋哈代兵,咱們一起學(xué)習(xí)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尼酿,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子植影,更是在濱河造成了極大的恐慌裳擎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件思币,死亡現(xiàn)場離奇詭異鹿响,居然都是意外死亡,警方通過查閱死者的電腦和手機谷饿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門惶我,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人博投,你說我怎么就攤上這事绸贡。” “怎么了毅哗?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵听怕,是天一觀的道長。 經(jīng)常有香客問我虑绵,道長尿瞭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任翅睛,我火速辦了婚禮声搁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捕发。我一直安慰自己疏旨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布爬骤。 她就那樣靜靜地躺著充石,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霞玄。 梳的紋絲不亂的頭發(fā)上骤铃,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音坷剧,去河邊找鬼惰爬。 笑死,一個胖子當(dāng)著我的面吹牛惫企,可吹牛的內(nèi)容都是我干的撕瞧。 我是一名探鬼主播陵叽,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丛版!你這毒婦竟也來了巩掺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤页畦,失蹤者是張志新(化名)和其女友劉穎胖替,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豫缨,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡独令,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了好芭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燃箭。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖舍败,靈堂內(nèi)的尸體忽然破棺而出招狸,到底是詐尸還是另有隱情,我是刑警寧澤瓤湘,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布瓢颅,位于F島的核電站恩尾,受9級特大地震影響弛说,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜翰意,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一木人、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧冀偶,春花似錦醒第、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至客年,卻和暖如春霞幅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背量瓜。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工司恳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绍傲。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓扔傅,卻偏偏與公主長得像耍共,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子猎塞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

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