unity 在Android平臺(tái)下喚起安裝界面(適配7.0以上系統(tǒng))

一、開始之前

在unity打包的apk中钓试,一般來說贫母,調(diào)用Android方式令哟,通過類似

obj = new AndroidJavaObject("android.content.Intent")
obj .Call<方法返回類型>("方法名", 參數(shù));

這樣的方式調(diào)用來實(shí)現(xiàn)一些簡單的功能症歇,但是當(dāng)實(shí)現(xiàn)比較復(fù)雜的功能或者代碼量比較多的時(shí)候就需要考慮使用jar包或者在unity中引用庫茉贡。由于是在unity中引用卖擅,所以jar包和引用庫的制作和集成和原生開發(fā)有少許不同:

1.1 制作jar包并使用

以在eclipse環(huán)境下制作為例:

  1. 首先在C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes目錄下拿到class.jar放入jar工程中
  2. 繼承UnityPlayerActivity蒜危,如果重寫onCreate方法去掉其中的setContentView()
  3. 編寫自己的功能接口(繼承了的好處就是在編寫時(shí)候可以用UnityPlayer.currentActivity當(dāng)作上下文呼伸,否則就用UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity")獲取上下文)
  4. 用Export導(dǎo)出Jar放入U(xiǎn)nity 的 Assets/plugins/Android/下
  5. 在C#腳本中通過AndroidJavaClass obj = new AndroidJavaClass("類的全路徑"); obj.CallStatic<接口返回類型>("接口名", 參數(shù) );調(diào)用
1.2 制作引用庫

當(dāng)接口功能中涉及一些權(quán)限身冀,資源使用的時(shí)候僅僅有jar包是不夠的,那么怎么把資源也同時(shí)引用進(jìn)來呢


unity下的引用庫目錄結(jié)構(gòu):
Assets
| Plugins
|--MyCustomResources
|-- libs
|-- res
| |--- values
| |--- values-en
|-- project.properties
|-- Androidmanifest.xml

注意 project.properties和Androidmanifest.xml不能少括享,否則不能成功打包搂根,其他資源參考Android工程結(jié)構(gòu)目錄添加

二、喚起安裝界面

在android 7.0之前铃辖,實(shí)現(xiàn)喚起僅需要就能實(shí)現(xiàn)

Intent install = new Intent(Intent.ACTION_VIEW);
install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(install);

7.0之后由于系統(tǒng)加入了訪問限制剩愧,系統(tǒng)的安裝程序直接訪問不了安裝包,

對(duì)于面向 Android 7.0 的應(yīng)用娇斩,Android 框架執(zhí)行的 StrictMode API 政策禁止在您的應(yīng)用外部公開 file:// URI仁卷。
如果一項(xiàng)包含文件 URI 的 intent 離開您的應(yīng)用,則應(yīng)用出現(xiàn)故障犬第,并出現(xiàn) FileUriExposedException 異常锦积。
要在應(yīng)用間共享文件,您應(yīng)發(fā)送一項(xiàng) content:// URI歉嗓,并授予 URI 臨時(shí)訪問權(quán)限丰介。
進(jìn)行此授權(quán)的最簡單方式是使用 FileProvider 類。如需了解有關(guān)權(quán)限和共享文件的詳細(xì)信息鉴分,請(qǐng)參閱共享文件哮幢。
--摘自Android developer

由于這個(gè)原因上面的操作在7.0以上設(shè)備上就毫無反映,雖然系統(tǒng)的安全更加可靠了冠场,對(duì)于開發(fā)者來說變得麻煩了家浇。本砰。碴裙。 那就只好配置本應(yīng)用的provider來解決了

      <provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="packagename.fileprovider"
            android:grantUriPermissions="true"
            android:exported="false">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/filepaths" />
        </provider>

filepaths文件、

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

應(yīng)用下載的目標(biāo)位置在存儲(chǔ)根目錄点额,在其他目錄要更改paths節(jié)點(diǎn)下的內(nèi)容

更改后的喚起安裝頁面的實(shí)現(xiàn)

                  if(Build.VERSION.SDK_INT>=24) {
                        Uri apkUri = FileProvider.getUriForFile(UnityPlayer.currentActivity, UnityPlayer.currentActivity.getPackageName() + ".fileProvider", file);
                        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");
                        UnityPlayer.currentActivity.startActivity(install);
                    } else{
                        Intent install = new Intent(Intent.ACTION_VIEW);
                        install.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
                        install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        UnityPlayer.currentActivity.startActivity(install);
                    }
三舔株、最后

Android的安裝功能實(shí)現(xiàn)起來并不復(fù)雜,主要是怎么在unity下調(diào)用Android的方法以及類庫的引用方式才是需要學(xué)習(xí)和記錄的地方还棱,最后希望能對(duì)閱讀者有所幫助载慈!

plugins下載:https://pan.baidu.com/s/1Hde5zFwI44FsNUYcCVYY4Q 密碼:654a

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市珍手,隨后出現(xiàn)的幾起案子办铡,更是在濱河造成了極大的恐慌辞做,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寡具,死亡現(xiàn)場離奇詭異秤茅,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)童叠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門框喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厦坛,你說我怎么就攤上這事五垮。” “怎么了杜秸?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵放仗,是天一觀的道長。 經(jīng)常有香客問我亩歹,道長匙监,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任小作,我火速辦了婚禮亭姥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘顾稀。我一直安慰自己达罗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布静秆。 她就那樣靜靜地躺著粮揉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抚笔。 梳的紋絲不亂的頭發(fā)上扶认,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音殊橙,去河邊找鬼辐宾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膨蛮,可吹牛的內(nèi)容都是我干的叠纹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼敞葛,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼誉察!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惹谐,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤持偏,失蹤者是張志新(化名)和其女友劉穎驼卖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸿秆,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡款慨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谬莹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檩奠。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖附帽,靈堂內(nèi)的尸體忽然破棺而出埠戳,到底是詐尸還是另有隱情,我是刑警寧澤蕉扮,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布整胃,位于F島的核電站,受9級(jí)特大地震影響喳钟,放射性物質(zhì)發(fā)生泄漏屁使。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一奔则、第九天 我趴在偏房一處隱蔽的房頂上張望蛮寂。 院中可真熱鬧,春花似錦易茬、人聲如沸酬蹋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽范抓。三九已至,卻和暖如春食铐,著一層夾襖步出監(jiān)牢的瞬間匕垫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工虐呻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留象泵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓铃慷,卻偏偏與公主長得像单芜,于是被迫代替她去往敵國和親蜕该。 傳聞我的和親對(duì)象是個(gè)殘疾皇子犁柜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,139評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)堂淡,斷路器馋缅,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 雷霆今日在主場以115-113戰(zhàn)勝了火箭萤悴,扳回一城瘾腰,他們現(xiàn)在大比分仍然以1-2落后于火箭。 “我們一開場要打得好一...
    Sandy體育風(fēng)云閱讀 155評(píng)論 0 0
  • 就像我偶爾發(fā)神經(jīng)的時(shí)候覆履,會(huì)反復(fù)的說蹋盆,其實(shí)你知道煩惱會(huì)解決煩惱,其實(shí)你知道煩惱會(huì)解決煩惱硝全,其實(shí)你知道煩惱會(huì)解決煩惱栖雾,...
    李阿冰閱讀 368評(píng)論 0 2
  • 今天的時(shí)政文章主題“傳銷—李文星之死”。我在想伟众,多可惜呀析藕,年輕的大學(xué)生就這么死了,怎么就這么簡單呢凳厢,他...
    尋覓美麗閱讀 339評(píng)論 0 0