Android 8.0升級(jí)不跳轉(zhuǎn)應(yīng)用安裝頁(yè)面的解決方法
最近開(kāi)發(fā)遇到了個(gè)問(wèn)題,app升級(jí)的時(shí)候,其他手機(jī)都能正常升級(jí),下載完安裝包,跳到安裝頁(yè)面進(jìn)行新版本的安裝。但卻有用戶反映,華為P10和華為Mate 9升級(jí)時(shí),怎么也無(wú)法跳轉(zhuǎn)到安裝頁(yè)面。起初我以為是華為手機(jī)自身系統(tǒng)的問(wèn)題(因?yàn)槭稚系娜A為測(cè)試機(jī)都是正常的),還特地對(duì)比了幾種配置的華為手機(jī),最后發(fā)現(xiàn),是Android 8.0系統(tǒng)版本的鍋,不是手機(jī)的問(wèn)題。
2017年8月22日,Google發(fā)布了Android 8.0的正式版,其正式名稱為:Android Oreo(奧利奧),Android 8.0強(qiáng)化了權(quán)限管理,變得更加安全。在Android 8.0以前,所有的未知來(lái)源應(yīng)用都可以被安裝,或者會(huì)彈窗給用戶一個(gè)提示,如此設(shè)計(jì)雖然方便,但是若被引誘安裝了惡意軟件,安裝"未知來(lái)源"的應(yīng)用有可能會(huì)對(duì)手機(jī)系統(tǒng)帶來(lái)潛在的危害;
而在Android 8.0的系統(tǒng)中,**未知來(lái)源應(yīng)用權(quán)限**的開(kāi)關(guān)被移除掉了,取而代之的是未知來(lái)源應(yīng)用的管理列表,如果你想要安裝某個(gè)被自己所信任的開(kāi)發(fā)者的app,則需要在每一次都手動(dòng)授權(quán)"安裝未知應(yīng)用"的許可。設(shè)置頁(yè)面如下圖:(在華為Android 8.0中,打開(kāi)該設(shè)置頁(yè)面:設(shè)置列表—>安全與隱私—>更多安全設(shè)置—>安裝未知應(yīng)用)

*如圖所示*,若某個(gè)應(yīng)用選擇的是“不允許”,那么假設(shè)app手動(dòng)升級(jí)的時(shí)候,就無(wú)法成功跳轉(zhuǎn)到安裝頁(yè)面進(jìn)行正常的App升級(jí)流程了,此時(shí)需要手動(dòng)去授權(quán)才行,但是很多用戶并不知道需要這么設(shè)置。
廢話說(shuō)了一大堆,解決其實(shí)很簡(jiǎn)單。
1.在AndroidManifest.xml文件中,添加REQUEST_INSTALL_PACKAGES權(quán)限
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2.在打開(kāi)安裝包的代碼中添加**兼容Android 8.0**的代碼。
/**
* 打開(kāi)安裝包
*
* @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è)置-允許安裝未知來(lái)源-頁(yè)面
*/
@RequiresApi(api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity() {
//注意這個(gè)是8.0新API
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中應(yīng)用界面主題Theme使用方法和頁(yè)面定時(shí)跳轉(zhuǎn)應(yīng)用
- Android如何跳轉(zhuǎn)到應(yīng)用商店的APP詳情頁(yè)面
- android 跳轉(zhuǎn)到應(yīng)用通知設(shè)置界面的示例
- android判斷手機(jī)是否安裝地圖應(yīng)用實(shí)現(xiàn)跳轉(zhuǎn)到該地圖應(yīng)用
- Android 應(yīng)用中跳轉(zhuǎn)到應(yīng)用市場(chǎng)評(píng)分示例
- Android應(yīng)用自動(dòng)跳轉(zhuǎn)到應(yīng)用市場(chǎng)詳情頁(yè)面的方法
- Android應(yīng)用閃屏頁(yè)延遲跳轉(zhuǎn)的三種寫法
- Android通過(guò)滑動(dòng)實(shí)現(xiàn)Activity跳轉(zhuǎn)(手勢(shì)識(shí)別器應(yīng)用)
- Android實(shí)現(xiàn)外部喚起應(yīng)用跳轉(zhuǎn)指定頁(yè)面的方法
相關(guān)文章
Android Activity啟動(dòng)模式之standard實(shí)例詳解
這篇文章主要介紹了Android Activity啟動(dòng)模式之standard,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android中活動(dòng)(Activity)四種啟動(dòng)模式中的standard相關(guān)注意事項(xiàng)與實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-01-01
android實(shí)現(xiàn)簡(jiǎn)單的畫畫板實(shí)例代碼
畫畫板實(shí)現(xiàn)起來(lái)其實(shí)很簡(jiǎn)單,我們只需要利用android給我們提供的Canvas類來(lái)操作就可以實(shí)現(xiàn)簡(jiǎn)單的畫畫功能2014-01-01
Android實(shí)現(xiàn)打開(kāi)手機(jī)淘寶并自動(dòng)識(shí)別淘寶口令彈出商品信息功能
最近項(xiàng)目經(jīng)理給我們安排一個(gè)活兒,基于Android開(kāi)發(fā)實(shí)現(xiàn)打開(kāi)手機(jī)淘寶,并自動(dòng)識(shí)別淘口令,彈出商品信息,今天小編就抽空給大家分享下這個(gè)需求是怎么實(shí)現(xiàn)的,需要的朋友參考下吧2017-11-11
Android實(shí)戰(zhàn)教程第四十篇之Chronometer實(shí)現(xiàn)倒計(jì)時(shí)
這篇文章主要介紹了Android實(shí)戰(zhàn)教程第四十篇之Chronometer實(shí)現(xiàn)倒計(jì)時(shí),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android上傳文件到Web服務(wù)器 PHP接收文件
這篇文章主要為大家詳細(xì)介紹了Android上傳文件到Web服務(wù)器,PHP接收文件的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
如何造個(gè)android Flow流式響應(yīng)的輪子
這篇文章主要介紹了如何造個(gè)android Flow流式響應(yīng)的輪子,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02

