1. 程式人生 > >[Unity]Android(安卓)程式碼安卓APK時,使用系統安裝器安裝的[最正確]辦法(不彈出選擇開啟的程式)

[Unity]Android(安卓)程式碼安卓APK時,使用系統安裝器安裝的[最正確]辦法(不彈出選擇開啟的程式)

關於這個辦法的搜尋,又是隻能找到一篇被到處轉又沒卵用的文章,我時相當氣憤的。經過Google大法,最終找到正確的開啟方式

先來看看錯誤的開啟方式

String str = "/CanavaCancel.apk"; 
String fileName = Environment.getExternalStorageDirectory() + str; 
Intent intent = new Intent(Intent.ACTION_VIEW); //某篇文章說關鍵在這裡
 intent.setDataAndType(Uri.fromFile(new File(fileName)), "application/vnd.android.package-archive"); 
startActivity(intent);

那個地方是不是真的關鍵不知道,可能在你的手機沒有安裝一些特別的應用的時候(比如115),因為只有系統安裝器可以選擇所以就會使用其打開了,但是顯然很多手機都安裝了一些類似的應用,你不能讓傻逼的使用者知道這時候該怎麼處理。

廢話結束進入正題

其實只要在startActivity之前設定一下,直接指定用什麼安裝就好,如果那些手機連繫統安裝器都沒有了,我覺得太奇葩就不用管了

 intent.setClassName("com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity");


安卓高手請勿噴,對於我這樣不精通安卓的人需要快速解決問題,那麼這個是最好的方法

那麼來看看在Unity如何方便的實現這個功能(用來做自更新)

    public bool InstallAPK(string path) {
        try {
            var Intent = new AndroidJavaClass("android.content.Intent");
            var ACTION_VIEW = Intent.GetStatic<string>("ACTION_VIEW");
            var FLAG_ACTIVITY_NEW_TASK = Intent.GetStatic<int>("FLAG_ACTIVITY_NEW_TASK");
            var intent = new AndroidJavaObject("android.content.Intent", ACTION_VIEW);
            
            var file = new AndroidJavaObject("java.io.File", path);
            var Uri = new AndroidJavaClass("android.net.Uri");
            var uri = Uri.CallStatic<AndroidJavaObject>("fromFile", file);

            intent.Call<AndroidJavaObject>("setDataAndType", uri, "application/vnd.android.package-archive");
            intent.Call<AndroidJavaObject>("addFlags", FLAG_ACTIVITY_NEW_TASK);
            intent.Call<AndroidJavaObject>("setClassName", "com.android.packageinstaller", "com.android.packageinstaller.PackageInstallerActivity");

            var UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            var currentActivity = UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            currentActivity.Call("startActivity", intent);
            return true;
        } catch (System.Exception e) {
            t.text = "Error:" + e.Message + " -- " + e.StackTrace;
            Debug.LogError(t.text);
            return false;
        }
    }

針對有些手機,比如小米手機,需要在catch到錯誤之後,再次執行這樣的步驟,但是刪除

  1.      intent.Call<AndroidJavaObject>("addFlags", FLAG_ACTIVITY_NEW_TASK);  
  2.         intent.Call<AndroidJavaObject>("setClassName""com.android.packageinstaller""com.android.packageinstaller.PackageInstallerActivity");  

這兩句,就能保證正確安裝


相關推薦

UnityAndroid程式碼APK使用系統安裝安裝正確辦法選擇開啟程式

關於這個辦法的搜尋,又是隻能找到一篇被到處轉又沒卵用的文章,我時相當氣憤的。經過Google大法,最終找到正確的開啟方式 先來看看錯誤的開啟方式 String str = "/CanavaCancel.apk"; String fileName = Environ

支付寶安機型支付只有第一次可以喚醒支付窗的bug有支付寶交易號

如果 win 註入 false 但是 前端 ipa span dep 占坑 之前公司的支付寶支付時相關項目代碼一直是 document.addEventListener(‘AlipayJSBridgeReady‘, function() { AlipayJSBr

Android shortcuts快捷方式實現支付寶長按圖示快捷方式入口

前言 Android shortcuts算是比較老的技術了,現在許多諸如支付寶、百度地圖等都實現了這一功能,這一功能是Android7.1推出的新功能,但是在國內app使用的還是比較少。我們先來看一下支付寶實現的效果圖。 這樣我們在使用的時候會方便許多,個人認為這種快捷方式更適合靜

Android 養成記-1 --1.4 動畫系列 選單側滑+圖示旋轉+dialog+點選效果

選單側滑動畫 思想是佈局檔案裡,將選單欄跟內容欄放在同一個layout中,但是選單欄初始是隱藏狀態. 總佈局是線性水平佈局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android EditText 的鍵盤坑爹

需求:如果想要不彈出鍵盤並且失去游標, 在layout佈局檔案裡,在EditText的父佈局中加上兩個屬性(我是直接載入頂層控制元件上) android:focusable="true" android:focusableInTouchMode="true" 缺點:當你點選 EditTex

android中EditText有游標軟鍵盤處理

if (android.os.Build.VERSION.SDK_INT <= 10) {et_input_batch_num_in.setInputType(InputType.TYPE_NULL); } else {getActivity().getWindow().setSoftInputMode

javascript 轉化一個數字數組為function數組每個function都相應的數字

logs func change code blog i++ pan str ons javascript 轉化一個數字數組為function數組(每個function都彈出相應的數字) var arrNum = [2,3,4,5,6,10,7]; var

html 表單提交無法獲取到disabled屬性的input值

有效 AS 單元 java check bsp ado 控件 下拉框 input的字段當為disabled是,無法獲取值,無法改變值,所以在表單提交時,獲取不到值。可以用randomly解決這個問題。 <input name="country" id="countr

全網詳細的CentOS7裏安裝MySQL出現No package mysql-server available錯誤的解決辦法圖文詳解

shell clear database 機器 AI rest secure can removing     不多說,直接上幹貨! 直接yum install mysql的話會報錯,原因在於yum安裝庫裏沒有直接可以用的安裝包,此時需要用到Mar

全網詳細的Hadoop HA集群啟動後兩個namenode都是standby的解決辦法圖文詳解

config bubuko 測試 IE oop per ali col 學到老   不多說,直接上幹貨! 解決辦法   因為,如下,我的Hadoop HA集群。

全網詳細的Hadoop HA集群啟動後兩個namenode都是active的解決辦法圖文詳解

oop 精神 問題 python shell enter 深度 In 智能 不多說,直接上幹貨!     這個問題,跟     是大同小異。    歡迎大家,加入我的微信公眾號:大數據躺過的坑

全網詳細的zkfc啟動以後幾秒鐘以後自動關閉問題的解決辦法圖文詳解

qq群 spa 同時 CA 研究 圖文 ogg bigdata 火墻   不多說,直接上幹貨! 問題詳情   情況描述如題所示,zkfc啟動以後,幾秒鐘以後自動關閉。 解決辦法:   1、檢查下每臺機

全網詳細的HBase啟動以後HMaster進程啟動了幾秒鐘以後自動關閉問題的解決辦法圖文詳解

圖片 png 刪除 sunny lan 技術 領域 regions pre     不多說,直接上幹貨!  問題詳情   情況描述如題所示,hbase啟動以後,HMaster進程啟動了,幾秒鐘以後自動關閉,但是HRegionServer進程正常運

一個開發10年程序員論:學習Python正確的步驟0基礎必備

時間 參數 推導 效率 階段 不同 資源 流程 網上 很多人都在問Python學習步驟應該如何安排?多長時間可以達到精通呢? 如果需要學習資料可以加Python學習交流群:548377875獲取小編精心給零基礎準備的入門資料。 當然了,如果你想要爬蟲或者web開發的項目視

win10中Telnet指令無效'telnet' 是內部或外部命令是可執行的程式

先說說什麼是telnet命令? telnet命令用於登入遠端主機,對遠端主機進行管理。 舉個栗子:在cmd中執行telnet  localhost  8431  也就等同於在瀏覽器中輸入localhost:8431 如果在cmd中使用telnet指令發現報錯:

關於pycharm中安裝第三方庫時報錯的解決辦法

記錄自己的生活!   一、事發背景 在pycharm中直接安裝第三方庫時因為版本問題總是無法安裝成功,事情不大,但是很重要。   二、經過 最開始我自己電腦上安裝了Python3.6和Python2.7兩個版本,我正常使用是3.6版的。因

演算法複雜度分析:分析演算法執行時間資源及空間資源的消耗

前言 演算法複雜度是指演算法在編寫成可執行程式後,執行時所需要的資源,資源包括時間資源和記憶體資源。 複雜度也叫漸進複雜度,包括時間複雜度和空間複雜度,用來粗略分析執行效率與資料規模之間的增長趨勢關係,越高階複雜度的演算法,執行效率越低。 複雜度分析是資料結構與演算法的核心精髓,指在不依賴硬體、宿主環境

Win7 安裝Anaconda3完整過程記錄附加無法瀏覽器問題處理

  【安裝環境】 1.Win7 64位 旗艦版 2.已安裝Python3.7 【前情】 最近在安裝Anaconda3的時候,前面的環節沒啥問題,除了路徑都是一路預設。安裝後直接點選jupyter無法彈出預設瀏覽器,需要手動複製命令列裡面的連結 -。-!   【安裝過程】(

工具類:防抖動極短時間多次點選導致介面多個dialog

工具類: public class OnClickUtils {     // 兩次點選按鈕之間的點選間隔不能少於500毫秒     private static final int MIN_CLICK_DELAY_TIME = 500;   &

關於Python安裝後升級pip失敗的解決辦法實測有效

問題還原:    (1)安裝requests時出現pip需要升級。。。 (2)先檢查pip的版本            win+R,鍵入cmd回車,鍵入pip -V                         當前版本為9.0.3 (3)升級pip