1. 程式人生 > >解決Android7.0 更新安裝包時不能自動安裝問題

解決Android7.0 更新安裝包時不能自動安裝問題

專案中發現在自動更新功能的時候,下載好了apk的檔案後在android7.0系統中不能自動跳到安裝介面,後來搜尋了一番解決了問題,但感覺沒有描述清楚,所以補充一下。

每個Android版本的釋出,對於安全性問題的要求越來越高,也為Android程式設計師增加了額外的工作量。Android6.0引入動態許可權控制(Runtime Permissions),Android7.0引入私有目錄被限制訪問和StrictMode API 。私有目錄被限制訪問是指在Android7.0中為了提高應用的安全性,在7.0上應用私有目錄將被限制訪問,這與iOS的沙盒機制類似。StrictMode API是指禁止向你的應用外公開 file:// URI。 如果一項包含檔案 file:// URI型別 的 Intent 離開你的應用,則會報出異常。

也就是說不能訪問你應用私有的檔案夾了

那麼怎麼解決呢,GOGOOLE自然提供了方法,那就是允許共享你私有目錄下的一個資料夾,共享出去讓大家訪問,這樣就可以訪問你下載的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/provider_paths" /> </provider>

注意這一個配置 @xml/provider_paths

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

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

這個要說明一下

<files-path/>代表的根目錄: [Context.getFilesDir()](https://developer.android.com/reference/android/content/Context.html?hl=zh-tw#getFilesDir())

<external-path/>代表的根目錄: [Environment.getExternalStorageDirectory()](https://developer.android.com/reference/android/os/Environment.html?hl=zh-tw#getExternalStorageDirectory())

<cache-path/>代表的根目錄: [getCacheDir()](https://developer.android.com/reference/android/content/Context.html?hl=zh-tw#getCacheDir())

這樣就把這個目錄給共享出去了

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);
                    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);
  }

好了 現在就可以了

相關推薦

解決Android7.0 更新安裝不能自動安裝問題

專案中發現在自動更新功能的時候,下載好了apk的檔案後在android7.0系統中不能自動跳到安裝介面,後來搜尋了一番解決了問題,但感覺沒有描述清楚,所以補充一下。 每個Android版本的釋出,對於安全性問題的要求越來越高,也為Android程式設計師增加了額外的工作量。Android6.0引入動態許可權控

解決Android7.0更新後無法安裝的問題

?12345678if (!apkfile.exists()) {Toast.makeText(mContext, "下載的安裝包不存在", Toast.LENGTH_SHORT).show();return;}Intent install = new Intent(Intent.ACTION_VIEW);i

解決android7.0+ 自定義Toast長,但是toast不顯示問題

重點在於解決部分機型自定義Toast 時長不顯示問題 在部分手機上會出現自定義時長的Toast不顯示,從而導致出現bug(排除Toast許可權被關閉情況),這樣我們需要自定義Toast 程式碼如下 public class ToastUtils { pr

Android7.0及以上下載後自動安裝無法執行

在最近的專案中,用到了下載新版然後自動安裝更新的功能,但是發現在7.0手機上無法正常安裝,查閱資料,發現在android 7.0的行為變更中有說明,檔案共享發生了變化(自動安裝就是系統的安裝程式呼叫本專案的檔案,等同於在跨應用訪問資料) 對於面向 Andr

解決Android更新安裝不能自動安裝的問題

  一,安裝程式碼 private void installUseAS(String filePath) { File file = new File(filePath); Uri uri = Uri.fromFile(file);

Ubuntu:安裝常用軟體找不到安裝解決辦法

docker新下載的映象一般都是不帶非必需軟體得,常常需要自己安裝所需軟體,如果執行apt-get install vim提示找不到安裝包的時候,說明需要更新 執行: apt-get update 如果報錯或者網速慢,就替換其他源 cp /etc/apt/sources.l

Maven生成WAR自動更新版本號version

Maven外掛之buildnumber-maven-plugin 某些情況下(這種情況一般很少見),使用maven構建專案時,需要一個不重複的序列號,比如說,打包時,包名稱以當前構建時間結尾,或者每次生成的jar包中包含唯一的序列號,等等; 這個時候,就用到了buil

.net framework 打包進 msi安裝,使得安裝自動安裝

在visual studio 2005中把.net framework打包進MSI安裝包是非常容易。 我們首先要為自己的工程新增一個Setup工程: 1、檔案選單,選擇新建->工程 2、在新建工程對話視窗中,選擇Setup and Deployment 3

zabbix3.0/3.2/3.4自動安裝腳本

監控 腳本 自動化安裝 zabbix3.4 自動化安裝zabbix腳本(3.0/3.2/3.4)一、zabbix簡介 zabbix是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制

安裝兩個版本的python安裝,後安裝的python程序打開閃退

bsp 卸載 雙擊 python的安裝 環境變量 系統默認 電腦 3.6 路徑 1.環境變量的問題 (Win7)右鍵打開“計算機”的屬性設置→高級系統設置→環境變量。 在系統變量中的path中,編輯,在末尾加入Python的安裝路徑“F:\Python27”, 路徑與

WinFrom程式在打包成安裝遇到的問題

WinFrom程式打包成安裝包時遇到的問題 WinFrom程式打包成安裝包時遇到的問題 WinFrom程式在打包成安裝包時遇到的問題: 1.除錯的時候可以,安裝出來之後Button TEXT值顯示不出來 Button值分中英文版本,所有標籤的值都在配置檔案中,除錯的時候 配置檔案在D

yum 安裝提示:[Errno 5] [Errno 2] No such file or dir

http 清理 text 升級 pytho roc 圖片 ffffff 技術 這個原因是python的環境發生過改變,簡單來說就是升級過,導致python找不到原來的版本了。 此時可以查看一下以下兩個文件:/usr/bin/yum --第一行對應的python版本

cab自動安裝

  一個臨時性的問題: 原因就是使用者正在測試過程中, 有一個 影像系統和 一個高拍儀 軟體安裝的時候會需要 安裝一些本身自帶的ocx控制元件, 由於還需要拷貝檔案至c盤某個固定的資料夾下,等 使用者操作起來比較繁瑣(相比較而言), 為使使用者滿意度提高, 特地臨時安排我來解決這個問題

Android安裝APK提示安裝異常導致安裝失敗

今天本屌在簽名打包APK的時候遇到了一個問題 那就是 這個問題很奇葩,百度了居然沒有任何答案,我在OPPO論壇百度到了相關問題,管理員回覆這是OPPO為看保障使用者權益XXX的,嚇死寶寶了 百度無果,只能去群裡問了,在群裡好心朋友的提醒下 我察覺到簽名的問題(簽名:這個鍋我不背)

Android配置build.gradle實現Version Code編譯release自動增長(一)

Android配置build.gradle實現Version Code編譯release包時自動增長(一) 經常的,開發者在上線釋出之前要打出很多測試包給測試團隊測試,每次打出的release包為了區分不同的版本號,需要手動的修改Android裡面的配置檔案build.gradle的vers

(轉載)Anaconda找安裝,遇到PackageNotFoundError: ''Package missing in current channels"

原文地址:https://blog.csdn.net/ksws0292756/article/details/79192268 Anaconda作為一個工具包整合管理工具,下載python工具包是很方便的,直接敲: conda install package_name1但是有時候安裝一個工具包(如skim

emacs啟動自動安裝package

簡介 本文主要介紹如何在emacs中,自動安裝/更新package init.el中配置追加 (require 'package) (setq package-archives '(("gnu" . "https://elpa.gnu.org/packages/")

ubuntu16.04切換預設python版本以及使用pip安裝遇到的問題

1. 切換預設Python版本 使用下面命令檢視可以替換的版本號資訊: update-alternatives --list python 如果執行命令後出現錯誤提示 update-alternat

Vivo/Oppo手機安裝app自動輸入密碼以及點選安裝

Vivo手機和Oppo等手機在安裝App的時候總是會有一個討厭的彈窗讓我們輸入密碼或者點選繼續安裝,嚴重的影響了開發效率。如下圖所示 這簡直是無法忍受。於是想著寫一個軟體幫我自動點選。第一是想到的用輔助功能在介面上點。這樣是可以,但是經常服務在後臺被莫名其妙的停止了,而且在密碼窗介

Android7.0更新一覽,快來吃Nougat

在 Android N 中,我們添加了 Just in Time (JIT) 編譯器,對 ART 進行程式碼分析,讓它可以在應用執行時持續提升 Android 應用的效能。 JIT 編譯器對 Android 執行元件當前的 Ahead of Time (AOT) 編譯器進行了補充,有助於提升執行時效能,節