1. 程式人生 > >Android7.0 安裝apk更新包的適配

Android7.0 安裝apk更新包的適配

專案中發現在自動更新功能的時候,下載好了apk的檔案後在android7.0系統中不能自動跳到安裝介面,後來百度了一番解決了問題。

原因:

我們先來看看產生的原因:當我們在7.0上使用系統服務去下載apk並且試圖安裝時,有可能由於許可權問題導致安裝失敗。
每個Android版本的釋出,對於安全性問題的要求越來越高,也為Android程式設計師增加了額外的工作量。Android6.0引入動態許可權控制(Runtime Permissions),Android7.0引入私有目錄被限制訪問和StrictMode API 。私有目錄被限制訪問是指在Android7.0中為了提高應用的安全性,在7.0上應用私有目錄將被限制訪問,這與iOS的沙盒機制類似。StrictMode API是指禁止向你的應用外公開 file:// URI。 如果一項包含檔案 file:// URI型別 的 Intent 離開你的應用,則會報出異常。

更新步驟:

1.調介面判斷是否需要進行更新。
2.更新進行apk檔案的下載。
3.下載完畢後自動跳轉到更新頁面。

解決方法:

我的問題主要是出現在第三步,下載好了apk檔案後不能跳轉,下面來看如何解決
1.manifest進行註冊:

 <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="你的包名.fileprovider"
            android:grantUriPermissions
="true" android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>

2.xml檔案編寫:
新建xml資料夾,編寫file_paths:

<?xml version="1.0" encoding="utf-8"?>
<resources> <paths> <external-path path="" name="download"/> </paths> </resources>

3.寫跳轉程式碼:

   if(Build.VERSION.SDK_INT>=24) {//判讀版本是否在7.0以上
                    Uri apkUri = FileProvider.getUriForFile(this, "你的包名.fileprovider", apkFile);//在AndroidManifest中的android:authorities值
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//新增這一句表示對目標應用臨時授權該Uri所代表的檔案
                    install.setDataAndType(apkUri, "application/vnd.android.package-archive");
                    startActivity(install);
                } else{
                    Intent install = new Intent(Intent.ACTION_VIEW);
                    install.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(install);

主要就是判斷下如何使大於等於7.0系統,通過FileProvider類來獲取到apk檔案。
以上過程親測有效。

同時在呼叫系統相機的時候,如果涉及到Uri.fromFile(file)這樣的程式碼,都需要替換成上述通過Provider來回去Uri。

最近搞了個Android技術分享的公眾號,歡迎關注投稿。
這裡寫圖片描述

相關推薦

Android7.0 安裝apk更新

專案中發現在自動更新功能的時候,下載好了apk的檔案後在android7.0系統中不能自動跳到安裝介面,後來百度了一番解決了問題。 原因: 我們先來看看產生的原因:當我們在7.0上使用系統服務去下載apk並且試圖安裝時,有可能由於許可權問題導致安裝失敗。

Android7.0+安裝apk檔案之後不彈出安裝完成的介面解決辦法

在Android7.0+手上,版本升級完成,發現手機安裝完成,不啟動安裝完成頁面,而是直接關閉了,小編也是一頭霧水。琢磨了很久,下面小編把解決辦法show出來。 第一步:在資原始檔下面新建 xml資料夾,新建file_paths.xml檔案,程式碼如下: <?xml version="

Android7.0的相機呼叫和

在很多地方檢視Android7.0相機的呼叫的文章,但是自己還不是很理解。最終還是做出來了。發表一下自己的感受。第一次寫文章,不足之處請多多包含。以後會努力提高自己。 1.談到Android7.0的相

Android7.0安裝apk檔案之後不彈出安裝介面的問題

Android7.0以下的版本,別忘了加上: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);   Android7.0以上的版本,還需要加上許可權: <uses-permission android:name="an

Android開發 android7.0安裝apk檔案的姿勢

最近看到一個庫,覺得有點意思,就下載原始碼編譯了一下,結果發現打不開apk包,報錯為: //這個庫的地址是:https://github.com/bingoogolapple/BGAUpdate-Android //設定了超連結也不變色,還

Android app實現自更新安裝,許可權檢測Android6.0以下和Android6.0Android7.0和Android8.0總結篇

首先下載問檔案需要在AndroidManifest.xml裡新增SD卡讀寫許可權,下面兩個許可權:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <us

Android7.0以上自動更新安裝apk

Android7.0以上加了很多特性,也對系統做了很多的優化和升級,而在對Uri的訪問上也做了改變,以下用安裝apk的例子來說明 對於程式,我們要實現程式能夠自動檢查更新安裝,我們需要給程式賦予許可權 <uses-permission android:name="an

安卓專案實戰之APP版本升級更新安卓7.0

前言 APP的版本升級主要分為兩種方式: 1.應用市場升級 2.應用內升級 而應用內升級的方式是目前大多數APP採用的升級更新方式。 應用內升級的模式 按照不同的業務需求又可以分為兩種: 1,強制性更新 如果APP有更新,那麼則彈出更新提示對話方塊,並且

Android 一行程式碼版本更新到Android8.0

做Android 專案的時候一般都需要在App內版本更新,以前自己寫過,今天介紹的不是自己的,是一個開源,功能比較強大,一句話實現版本更新功能 一、依賴 compile 'com.allenliu.versionchecklib:library:2.0.5' 二、程式碼 AllenVer

應用內下載更新appAnsroid7.0,8.0

應用中使用的下載更新app的方式 1.使用Okhttp進行apk檔案下載 module的gradle中加入下面兩行,專案依賴Okhttp 2.訪問檔案適配android 7.0及以上版本 在Manifest中新增: 3.res資原始檔下建立目錄xml: 下載

Android7.0、8.0安裝apk以及安裝apk彈出“選擇開啟方式”的解決方案

目錄 問題描述 解決方案 問題描述 解決方案 問題描述 解決方案 最近在做一款APP,做自動更新的時候,安裝apk遇到了一些問題: FileUriExposedException異常; 無法跳轉到APP安裝頁面,無法進行版本更新升

Android 版本更新7.0 xml配置)

版本更新一般分兩種情況: 需要更新時跳轉到應用市場或者跳轉到瀏覽器處理 另一種情況則是在App內進行更新 第一種沒什麼好說的,本文主要是實現應用內進行更新 App內部更新分以下幾個步驟: 檢測App版本 下載Apk 安裝已下載完成的Apk 下面貼上例項: 1.

Android8.0未知來源應用安裝許可權最好的方案

Android8.0的諸多新特性中有一個非常重要的特性:未知來源應用許可權 以前安裝未知來源應用的時候一般會彈出一個彈窗讓使用者去設定允許還是拒絕,並且設定為允許之後,所有的未知來源的應用都可以被安裝。 Android8.0的變化是,未知應用安裝許可權的開關被除掉,取而代之的是未知來源應用的管理列表,需

Android 相容8.0 系統 安裝apk 未知

隨著系統升級,相容不同的系統必備 自動更新後安裝 註冊許可權 <!-- 請求安裝許可權 8.0 --> <uses-permission android:name="an

1.4.0 H5頁面移動端準備

本章主要講解移動端研發用HTML做頁面需要做的一些準備,用第二篇文章apicloud預設生產專案做講解。希望閱讀完能夠牢記於心,舉一反三! 1.4.1 序言 有WEB開發經驗的相關技術人員都知道傳統的HTML和JS在移動裝置上有很多相關的屬性在移動端的是不適用的

訊息通知Notificatio在8.0上不顯示,Android8.0

public class NotificationUtil { private Context aContext; private NotificationManager notificationManager; private static class Notifi

Android 8.0通知欄推送及

上一篇我們確保了我們開啟了通知欄的許可權,那麼接下來就是傳送推送了,廢話不多說,上程式碼。 首先我們判斷手機版本號,Android版本大於8.0的時候呢,我們需要進行一下通道的操作才可:判斷版本號程式碼接好 //此處判斷安卓版本號是否大於或者等於Android8.0 if (Build.VE

android 7.0安裝apk失敗

7.0中通過FileProvider 來對Content URI讀取授權處理 可參考谷歌官網對FileProvider的說明點選開啟連結。 1.在AndroidManifest.xml中定義FileProvider: <manifest xmlns:android="http

Android通知欄微技巧,8.0系統中通知欄的

大家好,今天我們繼續來學習Android 8.0系統的適配。 之前我們已經講到了,Android 8.0系統最主要需要進行適配的地方有兩處:應用圖示和通知欄。在上一篇文章當中,我們學習了Android 8.0系統應用圖示的適配,還沒有看過這篇文章的朋友可以

蘋果:7月起新提交iOS應用更新必須劉海屏

【PConline資訊】5月8日訊息,據報道,蘋果在今年2月份曾通知應用開發者,4月起所有新提交的iPhone應用,必須適配iPhoneX的劉海屏,而現在蘋果向現有iOS應用的更新也發出了適應劉海屏的要求。 蘋果在官網公佈的要求顯示,從2018