Android O 8.0,版本升級不跳轉(zhuǎn)應用安裝頁面的完美解決

最近開發(fā)遇到了個問題绞绒,app升級的時候婶希,其他手機都能正常升級,下載完安裝包蓬衡,跳到安裝頁面進行新版本的安裝喻杈。但卻有用戶反映,華為P10和華為Mate 9升級時狰晚,怎么也無法跳轉(zhuǎn)到安裝頁面筒饰。起初我以為是華為手機自身系統(tǒng)的問題(因為手上的華為測試機都是正常的),還特地對比了幾種配置的華為手機壁晒,最后發(fā)現(xiàn)瓷们,是Android 8.0系統(tǒng)版本的鍋,不是手機的問題。

2017年8月22日换棚,Google發(fā)布了Android 8.0的正式版式镐,其正式名稱為:Android Oreo(奧利奧),Android 8.0強化了權(quán)限管理固蚤,變得更加安全。在Android 8.0以前歹茶,所有的未知來源應用都可以被安裝夕玩,或者會彈窗給用戶一個提示,如此設計雖然方便惊豺,但是若被引誘安裝了惡意軟件燎孟,安裝"未知來源"的應用有可能會對手機系統(tǒng)帶來潛在的危害;

而在Android 8.0的系統(tǒng)中尸昧,未知來源應用權(quán)限的開關(guān)被移除掉了揩页,取而代之的是未知來源應用的管理列表,如果你想要安裝某個被自己所信任的開發(fā)者的app,則需要在每一次都手動授權(quán)"安裝未知應用"的許可烹俗。設置頁面如下圖:(在華為Android 8.0中爆侣,打開該設置頁面:設置列表—>安全與隱私—>更多安全設置—>安裝未知應用)

3828835-5c25da54c93b55cc.png

如圖所示,若某個應用選擇的是“不允許”幢妄,那么假設app手動升級的時候兔仰,就無法成功跳轉(zhuǎn)到安裝頁面進行正常的App升級流程了,此時需要手動去授權(quán)才行蕉鸳,但是很多用戶并不知道需要這么設置乎赴。
廢話說了一大堆,解決其實很簡單潮尝。

1.在AndroidManifest.xml文件中榕吼,添加REQUEST_INSTALL_PACKAGES權(quán)限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2.在打開安裝包的代碼中添加兼容Android 8.0的代碼。

 /**
     * 打開安裝包
     *
     * @param mContext
     * @param fileUri
     */
    public void openAPKFile(Activity mContext, String fileUri) {
        DataEmbeddingUtil.dataEmbeddingAPPUpdate(fileUri);
        // 核心是下面幾句代碼
        if (null != fileUri) {
            try {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                File apkFile = new File(fileUri);
                //兼容7.0
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileProvider", apkFile);
                    intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
                    //兼容8.0
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls();
                        if (!hasInstallPermission) {
                            ToastUtil.makeText(MyApplication.getContext(), MyApplication.getContext().getString(R.string.string_install_unknow_apk_note), false);
                            startInstallPermissionSettingActivity();
                            return;
                        }
                    }
                } else {
                    intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                }
                if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) {
                    mContext.startActivity(intent);
                }
            } catch (Throwable e) {
                e.printStackTrace();
                DataEmbeddingUtil.dataEmbeddingAPPUpdate(e.toString());
                CommonUtils.makeEventToast(MyApplication.getContext(), MyApplication.getContext().getString(R.string.download_hint), false);
            }
        }
    }

    /**
     * 跳轉(zhuǎn)到設置-允許安裝未知來源-頁面
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void startInstallPermissionSettingActivity() {
        //注意這個是8.0新API
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(intent);
    }
最后勉失,附上我的一個Kotlin編寫+組件化開發(fā)的開源項目Designer

Kotlin+組件化開發(fā)實踐—開源項目Designer-App

Designer項目算是傾注了我蠻多心血了羹蚣,每個頁面和功能都當成是上線的App來做,App的logo還特地做了UI設計??力求做到精致和完善戴质,其中還包括了很多自己項目開發(fā)中的經(jīng)驗匯總和對新技術(shù)的探索和整合度宦,希望對各位讀者有所幫助,歡迎點個star告匠,follow戈抄,或者給個小心心,嘻嘻??也可以分享給你更多的朋友一起學習后专,您的支持是我不斷前進的動力划鸽。如果有任何問題,歡迎在GitHub上給我提issue或者留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裸诽,一起剝皮案震驚了整個濱河市嫂用,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丈冬,老刑警劉巖嘱函,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埂蕊,居然都是意外死亡往弓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門蓄氧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來函似,“玉大人,你說我怎么就攤上這事喉童∑材” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵堂氯,是天一觀的道長蔑担。 經(jīng)常有香客問我,道長祖灰,這世上最難降的妖魔是什么钟沛? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮局扶,結(jié)果婚禮上恨统,老公的妹妹穿的比我還像新娘。我一直安慰自己三妈,他們只是感情好畜埋,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著畴蒲,像睡著了一般悠鞍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上模燥,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天咖祭,我揣著相機與錄音,去河邊找鬼蔫骂。 笑死么翰,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的辽旋。 我是一名探鬼主播浩嫌,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼檐迟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了码耐?” 一聲冷哼從身側(cè)響起追迟,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骚腥,沒想到半個月后敦间,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡束铭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年每瞒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纯露。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖代芜,靈堂內(nèi)的尸體忽然破棺而出埠褪,到底是詐尸還是另有隱情,我是刑警寧澤挤庇,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布钞速,位于F島的核電站,受9級特大地震影響嫡秕,放射性物質(zhì)發(fā)生泄漏渴语。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一昆咽、第九天 我趴在偏房一處隱蔽的房頂上張望驾凶。 院中可真熱鬧,春花似錦掷酗、人聲如沸调违。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽技肩。三九已至,卻和暖如春浮声,著一層夾襖步出監(jiān)牢的瞬間虚婿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工泳挥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留然痊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓羡洁,卻偏偏與公主長得像玷过,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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