Android 8.0升級不跳轉(zhuǎn)應(yīng)用安裝頁面的解決方法
最近開發(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以前,所有的未知來源應(yīng)用都可以被安裝,或者會彈窗給用戶一個提示,如此設(shè)計雖然方便,但是若被引誘安裝了惡意軟件,安裝"未知來源"的應(yīng)用有可能會對手機系統(tǒng)帶來潛在的危害;
而在Android 8.0的系統(tǒng)中,**未知來源應(yīng)用權(quán)限**的開關(guān)被移除掉了,取而代之的是未知來源應(yīng)用的管理列表,如果你想要安裝某個被自己所信任的開發(fā)者的app,則需要在每一次都手動授權(quán)"安裝未知應(yīng)用"的許可。設(shè)置頁面如下圖:(在華為Android 8.0中,打開該設(shè)置頁面:設(shè)置列表—>安全與隱私—>更多安全設(shè)置—>安裝未知應(yīng)用)
*如圖所示*,若某個應(yīng)用選擇的是“不允許”,那么假設(shè)app手動升級的時候,就無法成功跳轉(zhuǎn)到安裝頁面進行正常的App升級流程了,此時需要手動去授權(quán)才行,但是很多用戶并不知道需要這么設(shè)置。
廢話說了一大堆,解決其實很簡單。
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)到設(shè)置-允許安裝未知來源-頁面 */ @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); }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中應(yīng)用界面主題Theme使用方法和頁面定時跳轉(zhuǎn)應(yīng)用
- Android如何跳轉(zhuǎn)到應(yīng)用商店的APP詳情頁面
- android 跳轉(zhuǎn)到應(yīng)用通知設(shè)置界面的示例
- android判斷手機是否安裝地圖應(yīng)用實現(xiàn)跳轉(zhuǎn)到該地圖應(yīng)用
- Android 應(yīng)用中跳轉(zhuǎn)到應(yīng)用市場評分示例
- Android應(yīng)用自動跳轉(zhuǎn)到應(yīng)用市場詳情頁面的方法
- Android應(yīng)用閃屏頁延遲跳轉(zhuǎn)的三種寫法
- Android通過滑動實現(xiàn)Activity跳轉(zhuǎn)(手勢識別器應(yīng)用)
- Android實現(xiàn)外部喚起應(yīng)用跳轉(zhuǎn)指定頁面的方法
相關(guān)文章
在Android應(yīng)用中實現(xiàn)離線數(shù)據(jù)同步的步驟詳解
在構(gòu)建 Android 應(yīng)用時,離線數(shù)據(jù)同步是一個不可或缺的環(huán)節(jié),無論是網(wǎng)絡(luò)狀況不佳,還是用戶處于飛行模式,離線數(shù)據(jù)同步都能讓用戶在無網(wǎng)絡(luò)的情況下繼續(xù)使用應(yīng)用,本文將詳細介紹如何在 Android 應(yīng)用中實現(xiàn)離線數(shù)據(jù)同步,需要的朋友可以參考下2024-08-08Android開發(fā)框架之自定義ZXing二維碼掃描界面并解決取景框拉伸問題
這篇文章主要介紹了Android開發(fā)框架之自定義ZXing二維碼掃描界面并解決取景框拉伸問題的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-06-06Android App開發(fā)中將View或Drawable轉(zhuǎn)為Bitmap的方法
這篇文章主要介紹了Android App開發(fā)中將View或Drawable轉(zhuǎn)為Bitmap的方法,其中View轉(zhuǎn)換時作者特別提到了getDrawingCache=null問題的解決方法,需要的朋友可以參考下2016-03-03Android?PowerManagerService?打開省電模式
這篇文章主要介紹了Android?PowerManagerService打開省電模式,文章通告省電模式的打開過程、什么是?battery?saver?sticky?模式兩部分展開詳情,感興趣的朋友可以參考一下2022-08-08Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法
這篇文章主要介紹了Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法,介紹了是否有網(wǎng)絡(luò)連接判斷、連接的類型和監(jiān)聽網(wǎng)絡(luò)狀態(tài)的方法,需要的朋友可以參考下2014-06-06Android 服務(wù)端將位置信息發(fā)送給客戶端的實現(xiàn)
這篇文章主要介紹了Android 服務(wù)端將位置信息發(fā)送給客戶端的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01