1. 程式人生 > >Unity3D與Android專案互動中無法監聽back鍵返回的解決辦法

Unity3D與Android專案互動中無法監聽back鍵返回的解決辦法

 這兩天為解決unity3d與android專案整合中出現的無法監聽真機back實體鍵的問題找了很多資料,網上也有很多人遇到了這個問題,但是似乎都沒找到有效的解決方法。

   實現的效果是從A_Activity跳轉到UnityPlayerNativeActivity,傳入引數載入對應的三維圖,按返回鍵或home鍵分別返回上一個activity和返回桌面。預設情況下按home鍵會返回桌面,但是按back鍵則無法監聽到,沒有任何反應。

===========UnityPlayer相關==============================

   UnityPlayer裡有三個類,分別是UnityPlayerProxyActivity、UnityPlayerActivity、UnityPlayerNativeActivity。

   UnityPlayerProxyActivity用來判斷手機的系統版本,從而確定啟動UnityPlayerActivity還是UnityPlayerNativeActivity。所以UnityPlayerProxyActivity這個類自己就直接去掉不用了。

   UnityPlayerNativeActivity這個類的載入速率據說會比較快,系統版本要求2.3以上,之前也一直用這個類整合使用。但是這兩天在使用這個類時一直沒法解決實體按鍵事件的問題,具體可以看下這段介紹:

UnityPlayerNativeActivity

同樣我們可以建立UnityPlayerNativeActivity的子類,這與建立UnityPlayerActivity的子類具有相同的效果,但是會有較小的輸入延遲。但是,需要明白的是,NativeActivity是在Gingerbread中引入的(即android 2.3),老的android版本沒有這個特性,因為在NativeActivity中,觸控事件都是在native程式碼中處理的,java檢視正常情況下是無法獲取這些事件的,不過在unity3d中,有允許將事件傳到DalvikVM的轉發機制,要應用這個轉發機制,必須修改manifest檔案如下:


01.<?xml version="1.0" encoding="utf-8"?> 03.<application android:icon="@drawable/app_icon" android:label="@string/app_name"> 04.<activity android:name=".OverrideExampleNative" 05.android:label="@string/app_name" 06.android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
>
07.<meta-data android:name="android.app.lib_name" android:value="unity" /> 08.<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" /> 09.<intent-filter> 10.<action android:name="android.intent.action.MAIN" /> 11.<category android:name="android.intent.category.LAUNCHER" /> 12.</intent-filter> 13.</activity> 14.</application> 15.</manifest>

   即使按照上述的xml配置後,進入三維圖的UnityPlayerNativeActivity後,除home鍵外,其他按鍵都沒法監聽到。

 ======================在Unity中捕捉Android的常用按鈕返回事件=============

   另有一種辦法是可以在jni指令碼檔案裡監聽到實體按鍵,可以在指令碼檔案裡對按鍵事件進行處理。不過針對返回鍵只有一個方法可以呼叫,即Application.Quit();但是這個方法會退出整個application,按下返回鍵後,三維圖頁面退出了,同時其他頁面也閃退了,無法返回到上一個activity的頁面。


01.#pragma strict 02.function Start () { 03.} 04.function Update () { 05.if(Input.GetKey(KeyCode.Escape)){ 06.Application.Quit(); 07.} 08.} 09.function OnGUI () { 10.}

   於是改用UnityPlayerActivity這個類進行嘗試,通過測試終於發現可以直接在這個類裡監聽到按鍵,但是卻無法識別按鍵。

 

01.// Pass any keys not handled by (unfocused) views straight to UnityPlayer 02.public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) 03.{ 04.return mUnityPlayer.onKeyMultiple(keyCode, count, event); 05.} 06.public 

相關推薦

Unity3DAndroid專案互動無法back返回解決辦法

 這兩天為解決unity3d與android專案整合中出現的無法監聽真機back實體鍵的問題找了很多資料,網上也有很多人遇到了這個問題,但是似乎都沒找到有效的解決方法。    實現的效果是從A_Activity跳轉到UnityPlayerNativeActi

專案總結之 jquery,使用append增加新元素時,新增元素的繫結事件失效的解決辦法

$(“outerSelector”).on(“eventType”,“innerSelector”,function(){}); 舉例:如果在一個 中,通過append新增一個id="demo"的按鈕,常用的直接$(“Selector”).on(“eventType”,function

android 在fragment如何返回,home

在activity中用keydown很容易實現對返回鍵的監聽,但是這個函式不能再fragment中過載。  通過我嘔心瀝血的尋找,終於找到了解決辦法,對其他物理按鍵的監聽也同理。  Java程式碼   public class phonerecorder exten

Android在Service全域性輸入法的三種可實現方式

在Service中全域性監聽輸入法意思就是可以在任何介面都可以監聽輸入法,不侷限於自己的APP。 方法一:根據切換輸入法會在通知欄顯示通知實現 優點:簡單高效 缺點:手機必須安裝兩個以上輸入法 通常語言為中文的情況下切換輸入法的通知欄標題有”選擇輸

Fragment載入網頁(WebView)Back ,實現返回上一頁的功能

首先建立一個抽象類BackHandledFragment,該類有一個抽象方法onBackPressed(),所有BackHandledFragment的子類在onBackPressed方法中處理各自對Back事件的消費邏輯。onBackPressed返回布林值,宿主Acti

vmware無法檢測網絡卡的解決辦法

當用ifconfig -a或者ip addr檢視物理網絡卡時,發現無法檢測到所有的網絡卡。這種問題是因為建立的虛擬網絡卡沒有被連線虛擬主機上導致的,這裡找到了兩種辦法:方法一:    在vmx字尾的文件中新增enthernet1.virtualDev=“e1000”方法二: 

postgresql數據庫安裝後的pgadmin4無法加載本地連接解決辦法

9.png exe data esql 重裝 解決 分享圖片 卸載 安裝過程 postgresql 在安裝最後一步提示the database cluster initialisation failed, 而後點開pgadmin4發現如下圖所示 經過百度搜索找出問題原

Hbase shell 輸入無法使用退格刪除解決辦法

今天在進入hbase shell終端進行資料查詢和新增時,發現輸入的命令無法撤回,現將解決辦法寫下: 1.使用Ctrl + Backspace或Shift + Backspace組合鍵刪除 2.(SecureCRT) 選項--會話選項--模擬--終端--選擇Linux 選項

BrowserSync的大坑,不起作用解決辦法,附gulp瀏覽器同步自動重新整理部署方法

                能將本地伺服器代理到localhost:3000/localhsot:3001的操作:按照官網來操作的程式碼是不起作用的:browser-sync start --proxy "127.0.0.1:8081" "E:/newcrm/trunk/4_Tools/crm/**/*.

使用PL/SQL Developer 遠端連線Oracle資料庫出現 “無程式“錯誤 的解決辦法

今天在使用PLSQL遠端連線ORACLE資料庫的時候,突然報錯,無監聽程式,出現這個錯誤 我首先第一反應是開啟 服務 看了一下 Oracle常用的幾個服務是否正常啟動,監聽服務是否啟動,打開發現ORACLE的 所必須開的的服務  都已經正常執行,  然後我又嘗試連線了一下本

UnityAndroid互動專案結構

概述 為什麼會寫這樣的文章,原因是我們在使用Unity做開發的時候少不了跟其它平臺做互動,特別是當前流行的Android和iOS。但是由於Unity官方文件缺少這方便詳細的資料,以及每個人的開發水平也參差不齊,再加上涉及到多平臺的互動(不同平臺的開發者不甚瞭解

Unity3DAndroid(eclipse和AndroidStudio)互動問題

1. Android包名與unity的Android平臺簽名一致 2. 如果開發AndroidSDK Android支援版本和unity支援最低版本一致 3. 5.x 搜尋Classes.jar (找到unity安裝路徑 搜尋) Unity\Editor\Data\PlaybackEngines\Androi

android 專案開發遇到app主題無法指向style

今天換了主機,將原來程式碼遷移到新的主機上,通過行動硬碟開,不知道為何出現部分class亂碼的問題,通過github實現程式碼移植,直接打開出現app無法執行,類似app主題要加Base的這種問題,在清單檔案中發現,app主題無法指向style,解決方法,close proj

unity3dandroid互動

簡述 實現unity3d匯出到android studio工程並封裝為library,供其他工程匯入module直接使用。 最終效果: - 點選ZoomIn、ZoomOut的按鈕,通過android端呼叫unity中方法,進行放大放小; - 觸控unit

unity3d-Android互動(unity5、android studio)

unity-與Android互動(unity5、android studio) 使用的是工具是 unity5.4,Android Studio 2.0(後面簡稱 AS) 網上找到的教程大部分都是匯出jar給unity呼叫,極少是用AS匯出 aar 包給uni

Android開發執行方法含有時的處理

以WifiP2pManager. requestPeers()為例 方法一:直接新建一個監聽例項,然後新增監聽後的回撥方法 manager.requestPeers(channel, new WifiP2pManager.PeerListListener() {

React NativeAndroid互動

在使用RN進行跨平臺開發的過程中,經常會設計到跨平臺呼叫相關的內容,而在於RN進行互動的時候,最核心的就是RN提供的Component和Module。 其中,Component是專門將Native的UI暴露出來供JS呼叫的,而Native Module則是將N

React NativeAndroid通訊互動

剛建立的React Native 微信公眾號,歡迎微信掃描關注訂閱號,每天定期會分享react native 技術文章,移動技術乾貨,精彩文章技術推送。同時可以掃描我的微信加入react-native技術交流微信群。歡迎各位大牛,React Native技術愛好者加入

AndroidActivityLifecycleCallbacksActivity們的生命週期

如果你還在Activity的宣告周期函式(onCreate、onStart)列印log來看activity的宣告週期,那麼你就out了! 今天樓主叫你用ActivityLifecycleCallbacks來監聽activity們的宣告週期。 接下來上程式碼: Android

Android如何手機電話狀態

問題描述:當應用中需要對來電這一狀態進行處理時(例如來電時顯示來電話號碼歸屬地等),就需要對電話狀態進行監聽。 解決步驟:1.對電話狀態的監聽最好是放在服務中,因為有一種服務的啟動方式可以不依賴於activity的生命週期,即使activity被銷燬,服務依然在後臺執行。因