項(xiàng)目場景:
Unity開發(fā)的項(xiàng)目需要在安卓4.4.2盒子上運(yùn)行。
問題描述
1、會出
"從頂部向下滑動即可退出全屏模式。"的彈框,這是android4.4的一個(gè)特性,叫做沉浸模式(Full-screen Immersive Mode),當(dāng)app啟用該模式時(shí),應(yīng)用程序的界面會占據(jù)整個(gè)屏幕,屏幕上方的狀態(tài)欄和下方的導(dǎo)航欄會被隱藏,從屏幕頂端向下滑動就可以再次呼出狀態(tài)欄和導(dǎo)航欄,系統(tǒng)為了提醒用戶就多加了一個(gè)提示裝口。需要去掉這個(gè)彈框,否則用戶無法進(jìn)行下面的操作。
2、部分項(xiàng)目在啟動過程中加載很慢,經(jīng)測試有三款項(xiàng)目在啟動過程有20-30秒的加載時(shí)間;加載時(shí)間過長需要優(yōu)化。
原因分析:
1、安卓4.4以上的特性造成,但是大部分盒子針對這個(gè)特性做了優(yōu)化,個(gè)別型號的盒子沒有做優(yōu)化所以會有這個(gè)問題出現(xiàn)。
2、加載問題可能造成的原因:資源過大、打包方式問題、加載方式問題。
解決方案:
1、
第一種方法:(這個(gè)方法測試后不行,可能是我這邊的問題)
這個(gè)提示對于某些特殊的情況來說造成困擾,比如說某些深度定制的android系統(tǒng)無法使用鼠標(biāo)或者觸摸屏,打開全屏應(yīng)用時(shí),一旦出現(xiàn)了這個(gè)提示就無法消除,非常影響用戶體驗(yàn)。所以需要去除這個(gè)提示窗口。
此處并不是說要去除android的沉浸模式這個(gè)特性,而是僅僅去掉這個(gè)提示窗口。
相關(guān)代碼位于frameworks/base/policy/src/com/android/internal/policy/impl/目錄下的ImmersiveModeConfirmation.java文件里,打開這個(gè)文件,找到:
?
private final class H extends Handler {
private static final int SHOW = 0;
private static final int HIDE = 1;
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case SHOW:
handleShow((String)msg.obj);
break;
case HIDE:
handleHide();
break;
}
}
}
這段代碼的功能就是呼出和隱藏提示窗口的,我們只需要屏蔽掉handleMessage方法中的handleShow((String)msg.obj)和handleHide()即可。
第二種方法:重新onWindowFocusChanged方法(此方法經(jīng)測試cocos的可以去掉,unity的不行)
public void onWindowFocusChanged(boolean hasFocus){
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
showSystemUI();
}
}
public void showSystemUI(){
Handler mHandler = new Handler(){
public void handleMessage(Message msg){
getWindow().getDecorView().setSystemUiVisibility()(
View.SYSTEM_UI_FLAG_STABLE|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
|View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
);
}
};
mHandler.sendEmptyMessageDelayed(0,100);
}
重寫后cocos項(xiàng)目可以去掉彈框正常運(yùn)行了,但是Unity項(xiàng)目還是不行,繼續(xù)找其他解決方法;
其他公司技術(shù)支持建議修改activity的theme:修改為“@android:style/Theme.Translucent.NoTitleBar.Fullscreen”
Application的theme修改為;
<style name="titleTheme" parent="android:Theme" >
<!-- <item name="android:windowTitleSize">30dp</item> -->
<item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
<item name="android:windowTitleStyle">@style/CustomWindowTitle</item>
<item name="android:windowTitleSize">0sp</item>
</style>
修改theme后還是不行;
第三種方法:使用Unity插件(unityShowAndroidStatusBar.aar)
這個(gè)插件網(wǎng)上應(yīng)該能搜到,是有人封裝好之后分享的。之前在遇到這個(gè)問題的時(shí)候,公司技術(shù)使用插件解決過類似問題,但是使用插件后還是不行,懷疑是unity版本問題,現(xiàn)在使用的是unity2019.4.9f1,之前使用的是unity5.4.5f1;所以,使用5.4.5版本Unity創(chuàng)建空項(xiàng)目添加插件后在盒子上運(yùn)行,成功去掉彈框。所以,將所有項(xiàng)目從2019降版本到5.4.5(降版本很蛋疼)。
2、加載問題解決方案:(有加載問題的是Unity的項(xiàng)目,而且有三款沒有加載問題,有三款有)先優(yōu)化包體,包體從38兆優(yōu)化到15兆,加載時(shí)間一樣;繼續(xù)修改打包方式,將打包方式改為和沒有問題的項(xiàng)目一致,還是不行;用Unity打包改為導(dǎo)出后由androidstudio打包,還是不行;從log中看到加載進(jìn)度在4%的時(shí)候等待了20秒才繼續(xù)加載,而且中間沒有報(bào)錯(cuò);懷疑是有較大資源文件導(dǎo)致,檢查項(xiàng)目發(fā)現(xiàn)有一個(gè)音頻文件較大,有2.5M,直接去掉這個(gè)音頻打包后測試,加載時(shí)間變?yōu)?秒,問題應(yīng)該就出在音頻文件上了,繼續(xù)看另外兩款游戲,果然都有較大的音頻文件,將音頻文件壓縮到300Kb大小,打包后測試,加載依舊很快,至此,問題解決,全部壓縮音頻文件,全部重新打包,測試后全部通過。文章來源:http://www.zghlxwxcb.cn/news/detail-428272.html
插件我回頭會上傳到csdn,或者私信找我拿就行。文章來源地址http://www.zghlxwxcb.cn/news/detail-428272.html
到了這里,關(guān)于Unity打包的apk在安卓4.4.2盒子上碰到的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!