Android 7.0下載Apk後自動安裝

2021-02-14 郭霖

有爆料稱:自6月1日起,大量的樂視手機供應商聚集在朝陽區樂視大廈門口,口中高喊「樂視還錢!」這些供應商有的來自河南,有的來自成都。現場目擊者稱直到6月2日下午5點,樂視手機方面無人出面安撫一眾供應商。

大家早上好,新一周又開始啦!

本篇來自 cfy137000 的投稿,分享了如何在7.0下下載並安裝apk,希望對大家有所幫助。

cfy137000 的博客地址:

http://blog.csdn.net/cfy137000

1. 下載APK文件

使用 DownloadManager 來下載

在應用界面中展示下載進度

2. 安裝下載後的APK文件

DownloadManager 是 Android 提供的用於下載的類,使用起來比較簡單,它包含兩個靜態內部類 DownloadManager.Query 和 DownloadManager.Request;

DownloadManager.Request 用來請求一個下載,DownloadManager.Query 用來查詢下載信息

下載

1. 獲取 DownloadManager 對象

DownloadManager對象 屬於系統服務,通過 getSystemService 來進行安裝

DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);

一般獲取完成後會變成全局變量,方便之後使用

2. 開始下載

在使用 DownloadManager 進行下載的時候,就會用到 DownloadManager.Request

首先會創建出一個 DownloadManager.Request對象,在構造方法中接收 Uri,其實就是下載地址.

然後是文件的存放路徑,這裡需要說明,DownloadManager 下載的位置是不能放到內置存貯位置的,必須放到 Enviroment 中,這裡建議放到自己應用的文件夾,不要直接放到 SD卡 中,也就是通過 getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) 獲取到的路徑,該位置的文件是屬於應用自己的,在應用卸載時也會隨著應用一起被刪除掉,並且在使用該文件夾的時候,是不需要 SD卡 讀寫權限的

然後通過 request.setDestinationUri 來設置存儲位置,最後將請求加入到 downloadManager 中,會獲得一個 downloadID,這個 downloadID 比較重要,之後下載狀態,進度的查詢都靠這個 downloadID

進度查詢

在查詢下載進度的時候,會通過 downloadId 來指定查詢某一任務的具體進度:

在查詢進度的時候會使用到 DownloadManager.Query 這個類,在查詢的時候,也是使用的 Cursor,跟查詢資料庫是一樣的,進度信息會需要拿到文件的總大小,和當前大小,自己算一下,最後 Cursor對象 在使用過後不要忘記關閉了

下載完成

下載完成後,DownloadManager 會發送一個廣播,並且會包含 downloadId 的信息:

註冊這個廣播接收者

其他

這裡需要注意一點,在下載完成後需要提升一下文件的讀寫權限,否則在安裝的時候會出現apk解析失敗的頁面,就是別人訪問不了我們的apk文件

chmod 是Linux下設置文件權限的命令,後面的三個數字每一個代表不同的用戶組 
權限分為三種:讀(r=4),寫(w=2),執行(x=1)

那麼這三種權限就可以組成7種不同的權限,分別用1-7這幾個數字代表,例如7 = 4 + 2 + 1,那麼就代表該組用戶擁有可讀,可寫,可執行的權限;5 = 4 + 1,就代表可讀可執行權限

而三位數字就帶包,該登陸用戶,它所在的組,以及其他人

普通模式

在7.0之前安裝的時候,只需要通過 隱式Intent 來跳轉,並且指定安裝的文件 Uri 即可

在Android7.0之後的版本運行上述代碼會出現 android.os.FileUriExposedException 
「私有目錄被限制訪問」是指在 Android7.0 中為了提高私有文件的安全性,面向 Android N 或更高版本的應用私有目錄將被限制訪問。

而7.0的」 StrictMode API 政策」 是指禁止向你的應用外公開 file:// URI。 如果一項包含文件 file:// URI類型 的 Intent 離開你的應用,應用失敗,並出現 FileUriExposedException 異常。之前代碼用到的Uri.fromFile就是商城一個file://的Uri 在7.0之後,我們需要使用 FileProvider 來解決

第一步:在 AndroidManifest.xml 清單文件中註冊 provider

需要注意一下幾點:

第二步: 指定共享文件的目錄,需要在 res文件夾 中新建 xml 目錄,並且創建 file_paths

path=」「,是有特殊意義的,它代表根目錄,也就是說你可以向其它的應用共享根目錄及其子目錄下任何一個文件了。

第三步:使用 FileProvider

相較於之前的代碼,會把 Uri 改成使用 FiliProvider 創建的 Uri,並且添加 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) 來對目標應用臨時授權該 Uri 所代表的文件,而且 getUriForFile 中的 authority 參數需要填寫清單文件中的 authorities 的值

兼容 7.0 的安裝代碼是不能在 7.0 之前的版本運行的,這個時候就需要進行版本的判斷了:

root模式

如果應用已經獲取了 root 權限了,那麼我們可以實現自動安裝,即不會出現應用安裝的頁面,會在後臺自己慢慢的安裝,這個時候使用的就是用代碼去寫命令行了

這個方法就是將命令寫入到手機的 shell 中,su 就代表 root 權限了,而命令執行成功的話,會返回0的,接下來是安裝命令

String command = "pm install -r " + mApkPath;

-r 代表強制安裝,否則如果手機中已有該應用的話就會安裝失敗了,值得注意的是,要想等待命令執行的結果這個過程是很漫長的,所以在使用命令的時候是需要放到主線程中的

在寫完整代碼的時候需要把下載的代碼寫到 Service 中,否則你的 downloadid 就得通過別的方式去存儲了,而查詢下載進度,也是需要一直去查了,那麼就需要寫一個循環,並且放到子線程中,我們用 RxJava 做會比較舒服

由於代碼偏多,我這邊就不貼出了,感興趣的朋友可以點擊最後 閱讀原文 查看,或者訪問下面地址, 下載源碼查看:

http://download.csdn.net/download/cfy137000/9820195

每天學習累了,看些搞笑的段子放鬆一下吧。關注最具娛樂精神的公眾號,每天都有好心情。

如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊「投稿」菜單查看。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:

相關焦點

  • Android APK 瘦身實踐
    android 4.0+才原生支持webp, 但是我們的app是兼容2.3+,所以4.0以下的設備將無法看到圖片。考慮到我們4.0以下的所有設備比例之和大約在0.44%,非常少4.0以下的設備不會崩潰我們選擇不對4.0以下做webp兼容處理,不顯示就不顯示。否則,要引入webp相關so文件增大apk大小。
  • 【Android遊戲】9.0分售價25元的《帕斯卡契約》免費下載
    今天給大家分享的是《帕斯卡契約》免付費下載版後臺回復「PSK」即可獲得
  • 微信 v8.0.0 for Android 官方正式版
    微信十周年之際,微信 WeChat 8.0.0 for Android 正式版發布,安卓微信8.0版本帶來了一大波功能,例如:炸彈刷屏、
  • TCL電視安裝蜜蜂市場後,下載應用時不能安裝的解決辦法
    部分用戶反饋使用的TCL電視安裝上蜜蜂市場後,在蜜蜂市場裡下載應用後不能安裝,下面介紹三種方法,請遇到此問題的用戶按照下面的辦法操作:第一種辦法:電視系統如果是老版本,可以嘗試安裝蜜蜂市場TCL專版,通過專版即可正常下載安裝第二種辦法:如果電視系統是安卓
  • 黑閾4.2.1 安卓11 下載及安裝方法
    微信:vae1314lmb     想加微信交流群請添加作者微信備註拉群黑閾的帖子很多,剛剛找了一圈兒沒看到最新版的,我就搬運一下,順帶附上安裝方法
  • 微信8.0炸屏了 內測Android版下載
    微信8.0是微信時隔2年再次推出大版本更新,上一次還是在2018年12月推出的微信7.0,雖然是大版本更新,微信8.0並沒大刀闊斧的改動,主要是趣味性大大增加。新版本微信在添加好友時,要求主動設置對方的權限,權限分為僅對話和朋友圈兩類。如不設置權限,則無法完成添加好友的步驟。
  • Android藍牙自動配對攻略
    2、將Demo安裝在Android手機上,點擊按鈕,可以實現與目標藍牙設備的自動配對。3、若目標藍牙設備為Android手機的藍牙,則只能保證本設備不彈出配對框,對方還是會彈出配對框。若兩部手機都安裝了該Demo,則兩邊都可實現自動配對。4、由於使用了廣播機制,所以需要在Androidmanifest.xml進行如下配置。
  • 微信 for Android v7.0.4 正式版發布 更新了……
    微信 for Android v7.0.4 更新了什麼?- 發「視頻動態」時,可以搜一首歌設為背景音樂。微信 for Android 7.0.4 正式版 官方下載:http://dldir1.qq.com/weixin/android/weixin704android1420.apk  更新完畢之後,期待地進入登錄的界面,然後成功登上了自己的帳號。這時候,我仿佛覺得哪裡不妥,怎麼我看屏幕沒有以前清晰了?
  • 明明下載了APK文件 為什麼在智能電視上找不到?
    我們給電視或盒子安裝軟體時,經常會遇到的一種情況就是,明明用U盤下載好APK文件,但插到電視或盒子上時,根本找不到下載好的安裝包,
  • Android Studio 3.0 新功能解析和舊項目適配
    Java 8 Support3.0 對 Java 8 語言特性的默認支持使你不用在 build.gradle 配置文件中添加 jackOptions 一項。如果你有使用到的話,記得刪除:android { ... defaultConfig { ...
  • Android性能優化之APK瘦身詳解(瘦身73%)
    可能要換種方式表達,到目前為止沒有正真的往外推過,一直在內部執行7天討論需求,5天代碼實現的階段。你在寫上個版本的內容,好了,下個版本的更新內容已經定稿了。基於這種快速開發的現狀,我們app優化前已經有87.1M了,包大了,運營說這樣轉化不高,只能好好搞一下咯。優化過後包大小為23.1M(優化了73%,不要說我標題黨)。好了好了,我要闡述我的apk超級無敵魔鬼瘦身之心得了。
  • Android熱修復——Tinker
    打開 build -> bakApk -> app-1.0.0-0330-21-40-52 (根據時間命名)。release 文件夾中會出現我們剛打完的包。一個apk,對應一個txt文件。將app-1.0.0-0330-21-40-52備份,打補丁包的時候需要用到。
  • SpyNote V5.0圖形化工具遠程管理Android手機教程(附視頻)
    遠程監聽就是這麼簡單當心,安卓遠控(spynote)升級了……所需環境:Windows 7/8/10系統Java環境Microsoft .NET Framework 4.0框架SpyNote 5.0 (百度雲傳送門提取碼nhq6,官方下載地址)網絡通(用於埠映射到公網來達到穿透內網傳送門
  • Android Gradle 常用使用場景實現方式的總結
    當渠道多達數十個甚至上百個時,打包時間就會比較長,推薦其他打包方案,如:可以修改打包輸出的 apk 文件名,添加時間戳、編譯類型、版本信息等關鍵字,是 apk 文件更具識別性,如:apply plugin: 'com.android.application'def releaseTime() { return new Date().format
  • 【MOD3.0】崩壞3 跨端/改服 安裝包 V3.0.0 [iOS/安卓]
    有此需求的艦長們到下方的下載地址中    安裝新的客戶端安裝包就可以繼續玩改服的崩壞3了~    艦長們可以根據自己的需求選擇安裝包與安裝方式喲。:下載網盤中的【BH3_iOS蘋果服_安卓客戶端_3.0.0.apk】並在手機上安裝即可;        *安裝失敗先先卸載已安裝的崩壞3客戶端。
  • 網易雲音樂下載狗 Android 版
    網易雲音樂下載狗是一款免費手機音樂播放及下載應用,現在市面上超級多的音樂APP都是收費的,有的甚至連聽都是要收費,這款播放器還不錯,由個人開發而來,軟體沒有任何獷誥,直接免費播放及下載收費音樂,讓你聽歌,下歌不再花費金錢。
  • Android籤名機制之---籤名驗證過程詳解
    當文件讀完後,會接著調用JarVerifier.VerifierEntry.verify函數對其進行驗證。JarVerifier.VerifierEntry.write函數非常簡單:/** * This method handle all the work with PKCS7, ASN1 encoding, signature verifying, * and certification path building. * See also PKCS #7: Cryptographic Message Syntax Standard:
  • 從Google Play直接下載APK文件
    習慣從谷歌GooglePlay上下載安卓軟體或遊戲的安卓用戶都知道,無論在電腦端或者手機端的GooglePlay都無法下載得到軟體的apk格式源文件。這樣使得不少安卓用戶不得不轉移到其他第三方的安卓應用市場,通常第三方安卓軟體市場的軟體質量無法保證,惡意扣費盜竊隱私的事情不是頭一天發生的。
  • 【MOD3.7】崩壞3 跨端/改服 安裝包 v3.7.0
    崩壞3新版本v3.7.0